Laravel公式ドキュメント-シーディングの私的まとめ
シーディング
- シーダークラスDBにテストデータを設定できる
- シーダークラスは好きな名前をつけられる
-
DatabaseSeeder
クラスでシーディングの順番をコントロールできる
シーダクラス定義
php artisan make:seeder UserSeeder
作成されたシーダはdatabase/seeder
に保存される
このシーダクラスのrunメソッドしかない
このメソッドに処理を書くことでデータを設定できる
シーダの呼び出し
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を完全に作り直したいときに使える(最初にロールバックしてマイグレーションを実行するため)
ここまでを軽くやってみる
シーダはこれ
<?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.
試行錯誤
シーダファイルのインサート分を消すとシーダファイルの認識はされている
<?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.
もうダメだお手上げだと思ってしばらく放置
そしてなぜか時間をおいたら実行できた
もう訳がわからない
ただし
もう一度ドキュメント通りに進めてみたら今度は普通にデータがセットできた
なぜ上記の状態ではできなかったのかは全くわからないが今は良しとする