【Laravel】データベースに任意のデータをセットする例|シーディング

PHPフレームワークのLaravelでは、データベースのテーブルに初期値やダミーレコードをセットできるシーディングという機能があります。

今回は、そのシーディングを利用して、テーブルに任意のデータをセットする簡単な例となります。

また、テーブルに大量のランダムデータをセットするシーディングについては、以下のリンク先を参考にしてみてください。

【Laravel】シーディングを利用しテーブルに任意のデータをセットする例

シーディングを行うには、シーダーファイルを作成し、シーディング時に実行する処理を追記します。

以下、シーディングを行う手順例となります。また、データをセットするテーブルは、すでに作成してある前提としています。

シーダーファイルを作成

シーダーファイルを作成するコマンドは以下となります。また、作成したシーダーファイルは、database/seedsフォルダ内に追加されます。

php artisan make:seeder ファイル名

今回の例では、シーダーファイルの名前をExampleSeederとして、以下のコマンドを実行します。

php artisan make:seeder ExampleSeeder

任意のデータをテーブルにセットする処理をシーダに追記

次に、作成したシーダーファイルのrun()メソッド内に、任意のデータをテーブルにセットする処理を追記します。

以下、追記したシーダーファイルの例となり、run()メソッド内で、DBファサードを利用しexamplesテーブルのtitleカラムとdescriptionカラムに、任意のデータをセットする処理を追記しています。

<?php

use IlluminateDatabaseSeeder;

class ExampleSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        // テーブルにデータをセットする処理
        DB::table('examples')->insert([
            'title' => 'サイトタイトル',
            'description' => 'サイトの説明',
        ]);
    }
}

シーダーのクラスをDatabaseSeederで呼び出す

シーディングを実行すると、デフォルトで用意されているシーダーファイルのDatabaseSeederを実行します。

そのため、シーディングを実行した際に、上記で作成したシーダーを呼び出すには、以下の例のようにDatabaseSeederのrun()メソッド内で、call()メソッドを利用して呼び出します。

call()メソッドでは、引数に作成したシーダーのクラスを配列で指定します。

<?php

use IlluminateDatabaseSeeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        // 呼び出すシーダーのクラスを配列で指定
        $this->call([
            ExampleSeeder::class,
        ]);
    }
}

Composerのオートロードを実行

次に、作成したファイルを自動で読み込ませるため、以下のコマンドでComposerのオートロードを実行します。

composer dump-autoload

シーディングを実行

Composerのオートロードを実行後、以下のコマンドで、シーディングを行いDatabaseSeederを実行します。それにより、シーダクラスに従ってテーブルにデータをセットできます。

php artisan db:seed

また、指定したシーダーのクラスのみシーディングを実行する場合は、以下の例のようにオプションで実行するシーダーのクラスを指定します。

php artisan db:seed --class=ExampleSeeder

データベースをすべて作成し直してデータをセットしたい場合は、以下のコマンドを実行することで、すべてのテーブルを削除後にマイグレーションを実行し、シーディングを行います。

php artisan migrate:fresh --seed

参考サイトなど

コメント投稿コメント投稿欄を開く

コメントは、以下の項目(*は必須項目)を入力し「コメントを送信」ボタンから送信お願いします。メールアドレスは公開されることはありません。
Twitterで返信する場合はこちらから。

また、コメントは承認制となります。