【意外とハマる罠】LaravelのSeeaderを手動で作った時にやるべきこと

artisan

はじめに

こんにちは、イエノカドです。

今回は意外とハマってしまう罠が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の使い方がありますので、是非!

PHPフレームワークLaravel入門第2版 [ 掌田津耶乃 ]
created by Rinker

最後に

本来の手順はSeederファイルの作成は作成コマンドを実行してから、

似たようなもののファイルをコピペした方が良いんですね。

ちょっとコマンドを実行するのより処理を優先してコピペしたりすると

思わぬ罠にハマりますよね・・・。

少しでも参考になったら嬉しいです。

では、またお会いしましょう。

コメント

タイトルとURLをコピーしました