質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.24%

シーディングの実行を失敗してしまう

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,202

toll_tree

score 35

前提・実現したいこと

シーディングを実行したいです。

発生している問題・エラーメッセージ

php artisan make::seeder PeopleTableSeederとコマンドプロンプトに打ち込み、シーダーファイルを作成し、シーダーファイルを登録する為、DatabaseSeeder.phpに登録処理を記述しました。
そして、シーディングを実行する為、「php artisan db::seed」としたのですが以下のエラーが発生してしまいました
「 Illuminate\Database\QueryException  : SQLSTATE[HY000]: General error: 1 no such table: people (SQL: insert into "people" ("name", "mail", "age") values (taro, taro@yamada.jp, 12))」
以下は、databaseファイル内のconnection.phpのコードです。

ampp\htdocs\laravelapp\vendor\laravel\framework\src\Illuminate\Database\Connection.php:664
    660|         // If an exception occurs when attempting to run a query, we'll format the error
    661|         // message to include the bindings with SQL, which will make this exception a
    662|         // lot more helpful to the developer instead of just the database's errors.
    663|         catch (Exception $e) {
  > 664|             throw new QueryException(
    665|                 $query, $this->prepareBindings($bindings), $e
    666|             );
    667|         }

該当のソースコード

以下は、PeopleTableSeederです。

<?php

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

class PeopleTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $param = [
            'name' => 'taro',
            'mail'=> 'taro@yamada.jp',
            'age' => 12,
        ];
        DB::table('people')->insert($param);

        $param = [
            'name' => 'hanako',
            'mail' => 'hanako@flower.jp',
            'age' => 34,
        ];
        DB::table('people')->insert($param);

        $param = [
            'name' => 'sachiko',
            'mail' => 'sachiko@happy.jp',
            'age' => 56,
        ];     
        DB::table('people')->insert($param);
    }
}


以下は、DatabaseSeeder.phpです

<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
         $this->call(PeopleTableSeeder::class);
    }
}

試したこと

エラー「 1 no such table:」と出ていたので、 select count(*) from sqlite_master where type='table' and name='people';とコマンドに打ち込んだのですが、「1」が返ってきた為、テーブルは存在しているものと思われます。

補足情報(FW/ツールのバージョンなど)

laravelのバージョンは5.8
phpは、7.3.1
OSはwindows10です

追記です
以下は、php artisan make:migration create_people_tableとし、作成したマイグレーションファイルになります。

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreatePeopleTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('people', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('mail');
            $table->integer('age');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('people');
    }
}


データベースファイル名はdatabase.sqliteです。
ファイルのパスは「C:\xampp\htdocs\laravelapp\database」です。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2019/05/23 11:27

    エラーとPHPのコードだけ置かれても再現確認は不可能なので、
    SQLiteタグを追加し、構成ファイルのパスとファイル名、対象テーブルのCREATE TABLE文を記載してください。
    また、関連質問なのであれば関連質問のリンクを質問本文に追記してください。

    キャンセル

  • toll_tree

    2019/05/23 11:34

    構成ファイルのパスとはなんのファイルのことでしょうか?

    キャンセル

  • m.ts10806

    2019/05/23 11:37

    伝わってないのが不思議です。
    SQLiteの構成ファイルのパスとファイル名です。
    データベースファイルがどこかに置かれていないとSQLiteにアクセスできませんよ。「再現確認」なので「実際に同じファイルを同じ階層に置いて」でないと。
    逆にこの質問内容にあることだけで他人が再現確認できるか考えてみてください。「できるように勝手に置いた」では結局できるようにしかなりません。
    今は「できない」のが問題なのですから「できない」状況を完全再現できる情報を提示する必要があります。

    キャンセル

回答 2

checkベストアンサー

+2

まずはphp artisan migrate:statusを実行して本当にテーブルが生成されているか確認をしてください。
してるとは思いますが、migrateコマンドを実行しないとテーブルは作成されないです

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/23 12:13

    いや、ちがいます
    実行されたかの状態は一番左の「Yes」「No」で確認できます。
    今の状態は、(憶測ですが)usersテーブルとpassword_resetsテーブルについてはmigrate実行されているが、peopleテーブルはまだmigrate実行されてないよ、って状態です

    キャンセル

  • 2019/05/23 12:14

    php artisan db:seedを実行しましたら、
    「Seeding: PeopleTableSeeder
    Database seeding completed successfully.」と表示され、テーブルが作成され、シードが適用されていることが確認できました。

    キャンセル

  • 2019/05/23 12:18

    >peopleテーブルはまだmigrate実行されてないよ、って状態です
    取り敢えず、現在の状態としましては、php artisan statusで、「Run」項目の_create_people_tableはyesとなっていたので、無事実行されていたみたいです。
    ありがとうございました。

    キャンセル

+2

先日の質問の回答に書いたことを活かしてほしいです。
SQLを直接実行すること

「プログラムで実行しようとしているSQLを直に実行すること」
です。
INSERT実行しようとしているわけで、エラー文にもエラーとなっているSQL文を出してくれているのですから、それを拾って実行するのが通常です。

プログラムにどこにも書いていない、エラーメッセージにもない、エラーにならないSQLを実行しても何の問題切り分けにもなりません。

SELECT投げるにしてもINSERTしようとしている先に直接投げるべきです。
sqlite_masterに問い合わせるのはそのあとでsqlite_masterに投げるにしてもテーブル名で絞り込むよりselect name from ~~として一覧を出して確かめるやり方を取るべきですね。


SQLiteはファイルを直にそこに置いてアクセスさせるのでMySQLなどのDBと違って扱い方がやや特殊です。
SQLiteのエラーが出たのでしたらエラーの一部を見て自分で判断せず、そのエラーで検索して解決方法を模索するほうが確実でしょう。
コマンドから実行する場合には特にそうで、きちんとそのファイルを見に行っているか確認する必要もあります。

※上記は一例。同エラーSQLSTATE[HY000]: General error: 1 no such table検索で約 25,600 件ヒットします。それだけよく見るということですね。
General error: 1 no such tableだと約 630,000,000 件。
これだけあればどこかにズバリの解決策が転がっていることでしょう。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.24%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る