はじめに
こんにちは、イエノカドです。
今回は意外とハマってしまう罠がSeederにはあったので、
書いておきます。
Seederとは?
簡単に言えば、テストデータや初期データをコマンドを実行するだけで
データベースに保存できる処理を書けるクラスです。
Seeder生成コマンド
$ php artisan make:seed HogeHogeTableSeeder
これで新しく作ったHogeHogeTableSeederを
DatabaseSeederに追記してSeederを実行すれば問題なしです。
追記箇所
以下のようにDatabaseSeederに追記してください。
<?php
use Illuminate\\Database\\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application\'s database.
*
* @return void
*/
public function run()
{
// 追記
<strong>$this->call(HogeHogeTableSeeder::class);</strong>
}
Seeder実行コマンド
特定のSeederのみ実行
$ php artisan db:seed --class=HogeHogeTableSeeder
全Seeder実行
$ php artisan db:seed
手動でSeederを作成しただけだとエラーになる
これをやらずに似たような Seederを作る時に既にあるSeederをコピーして
新しいのを作る時もあると思います。
その時はdump-autoloadを実行しないと
Laravelが新しく作ったSeederのクラスを見つけられません。
Illuminate\\Contracts\\Container\\BindingResolutionException : Target class [HogeHogeTableSeeder] does not exist.
こんな感じでエラーが起こります。
要は新しく作ったよと教えるコマンドを実行しておかなければいけないのです。
コマンドで作った場合は教えることも同時にやっているので不要のようです。
ちなみにコマンドは、
$ composer dump-autoload
composerコマンドを設定できていない場合は、phpコマンドでpharファイルを実行してください。
$ php composer.phar dump-autoload
そうすればSeederも言うこと聞いてくれるでしょう。
参考
結構参考になったLaravelの本なので紹介しておきます。
Seeder以外にも基本や応用的なLaravelの使い方がありますので、是非!

最後に
本来の手順はSeederファイルの作成は作成コマンドを実行してから、
似たようなもののファイルをコピペした方が良いんですね。
ちょっとコマンドを実行するのより処理を優先してコピペしたりすると
思わぬ罠にハマりますよね・・・。
少しでも参考になったら嬉しいです。
では、またお会いしましょう。
コメント