1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Laravel】シーディングの私的まとめ

Posted at

Laravel公式ドキュメント-シーディングの私的まとめ

シーディング

  • シーダークラスDBにテストデータを設定できる
  • シーダークラスは好きな名前をつけられる
  • DatabaseSeederクラスでシーディングの順番をコントロールできる

シーダクラス定義

シーダ作成
php artisan make:seeder UserSeeder

作成されたシーダはdatabase/seederに保存される

このシーダクラスのrunメソッドしかない
このメソッドに処理を書くことでデータを設定できる

シーダの呼び出し

DatabaseSeeder.php
public function run()
{
    $this->call([
        UserSeeder::class,
        PostSeeder::class,
        CommentSeeder::class,
    ]);
}

callメソッドで呼び出すことでシーダを実行できる

シーダの実行

db:seedを使う

Composerのオートローダを再生成するために以下コマンドを実行
これをやらないと作成したクラスガオーとローダに反映されない

composer dump-autoload

DBへの初期値設定のために以下コマンドを実行

php artisan db:seed

これはデフォルトでDatabaseSeederクラスを実行する
特定ファイルを実行したい場合は--classオプションを使う

php artisan db:seed --class=UserSeeder

これでUserSeederクラスが実行される

migrate:freshを使う

またmigrate:freshを使っても初期値を設定できる。

php artisan migrate:fresh --seed

migrate:freshはDBを完全に作り直したいときに使える(最初にロールバックしてマイグレーションを実行するため)

ここまでを軽くやってみる

シーダはこれ

TestTableSeeder.php
<?php

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class TestTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $param=[
            'id'=>12,
            'stringCoslumn'=>'てすと',
        ];
         DB::table('testtable')->insert($param);
    }
}

シーダ作成からデータ設定までを軽くやってみると以下のようなエラーが出た

$ php artisan db;seed --class=TestTableClass
Target class [TestTableSeeder] does not exist.

TestTableSeederを作成したのがだそれが見つからないという

原因

composer dump-autoload

を実行していなかった

ぐぐったらすぐわかりました
参考:追加したはずのSeederが Class TableSeeder does not exist とか言われる

しかしエラー

$ composer dump-autoload
$ php artisan db:seed
Target class [TestTableSeeder] does not exist.

またも見つからないと言われDBを作り直すrefreshもやってみたが駄目だった

$ php artisan migrate:fresh --seed
Target class [TestTableSeeder] does not exist.

試行錯誤

シーダファイルのインサート分を消すとシーダファイルの認識はされている

TestTableSeeder.php
<?php

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class TestTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $param=[
            'id'=>12,
            'stringCoslumn'=>'てすと',
        ];
         //DB::table('testtable')->insert($param);
    }
}

$ php artisan db:seed
Seeding: TestTableSeeder
Seeded:  TestTableSeeder (0 seconds)
Database seeding completed successfully.

もうダメだお手上げだと思ってしばらく放置

そしてなぜか時間をおいたら実行できた

もう訳がわからない

ただし

もう一度ドキュメント通りに進めてみたら今度は普通にデータがセットできた
なぜ上記の状態ではできなかったのかは全くわからないが今は良しとする

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?