今回は、Laravelのseederでダミーデータを追加する方法を紹介致します!
seederとは?
データベースのテーブルにダミーデータを追加するファイルのことを「seeder」と言い、「seeder」を用いてデータベースにデータを一括で挿入することができます。
開発の初めにダミーデータがサクッと準備できるのでスムーズに開発に入ることができます!(実際に現場でも利用しておりました。)
挿入する手順(テーブル等が作成されている前提になります。)としては、
①seederファイルを作成
②seederファイルに挿入したい内容を記述
③『DatabaseSeeder.php』修正
④seederを実行
になります。
開発環境
Mac OS Monterey12.3.1
MAMP (PHP7.4.21 )
Composer version2.3.5
テーブル作成
今回は『customer』テーブルを用意しました。
カラム名 | 型 | Null |
id | INT | ◯ |
name | TEXT | ◯ |
tell_number | INT | ◯ |
birthday | DATE | ◯ |
regist_date | DATE | ◯ |
テーブル作成方法については下記に記載してます!
Models作成
$ php artisan make:model Customer
Laravelで上記コマンドを実行します。
Modelsディレクトリ内に『Customer.php』が作成されます。
<?php
namespace App\Models\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Customer extends Model
{
protected $fillable = [
'id',
'name',
'tell_number',
'birthday',
'regist_date',
];
}
$fillableにテーブルの項目を追加していきます。
seederファイル作成
$ php artisan make:seed CustomerTableSeeder
Laravelで上記コマンドを実行します。
seedersファイル内に『CustomerTableSeeder.php』が作成されます。
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class CustomerTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('customer')->insert([
[
'id'=> '1',
'name'=> '鈴木太郎',
'tell_number'=> '08011112222',
'birthday'=> '1990/01/20',
'regist_date'=> date('Y-m-d'),
],[
'id'=> '2',
'name'=> '田中太郎',
'tell_number'=> '08033334444',
'birthday'=> '1991/02/20',
'regist_date'=> date('Y-m-d'),
],[
'id'=> '3',
'name'=> '林太郎',
'tell_number'=> '08055556666',
'birthday'=> '1992/03/20',
'regist_date'=> date('Y-m-d'),
],[
'id'=> '4',
'name'=> '村田太郎',
'tell_number'=> '08077778888',
'birthday'=> '1993/04/20',
'regist_date'=> date('Y-m-d'),
],[
'id'=> '5',
'name'=> '上原太郎',
'tell_number'=> '08099991111',
'birthday'=> '1994/05/20',
'regist_date'=> date('Y-m-d'),
],
]);
}
}
『DatabaseSeeder.php』修正
seedersディレクトリの『DatabaseSeeder.php』へ、
下記『CustomerTableSeeder.php』を呼び出すためのコードを追加していきます。
$this->call(CustomerTableSeeder::class);
下記参考にしてください。
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
// \App\Models\User::factory(10)->create();
$this->call(CustomerTableSeeder::class);
}
}
データベースにデータを作成(seederを実行)
$ php artisan db:seed
上記コマンドを実行します。成功した場合は、DBにデータが登録されます。
稀にエラーが出ることがありますので対応方法を下記紹介します。
エラー①
Class "Database\Seeders\DB" not found
DBファサードが見つからないとのことなので、『CustomerTableSeeder.php』へ
下記を追記する必要があります。
use Illuminate\Support\Facades\DB;
エラー②
Numeric value out of range: 1264 Out of range value for column 'tell_number' at row 1
挿入しようとしているデータの値が、DBカラムの限界値を超えてしまっているとのことです。
そのため、DBカラムの限界値を編集する必要があります。
データベースを確認
『CustomerTableSeeder.php』で記述したデータが登録されています。
まとめ
Laravelでseederファイルを用いてダミーデータを登録する方法を紹介しました。
①テーブルを作成する
②Modelsファイルを作成する
③seederファイルを作成する
④『DatabaseSeeder.php』を修正する
⑤『php artisan db:seed』を実行する
上記の流れでダミーデータを作成することができるので参考にしてみてください。
最後までご覧いただきありがとうございました!
コメント