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

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

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

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

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

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

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

シーダーファイルを作成

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

php artisan make:seeder ファイル名

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

php artisan make:seeder ExampleSeeder

任意のデータをテーブルに挿入する処理をシーダに追記

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

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

<?php

use Illuminate\Database\Seeder;

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 Illuminate\Database\Seeder;

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で返信する場合はこちらから。