【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