
seederとは、ファイルに書いた内容をデータベースに任意の値を登録できる便利なやつ。
ダミーデータや、あらかじめ入れておきたいデータなどを一括で格納することができる。
初期データの登録に使うイメージ。
具体的な利用方法について解説。
コマンドを叩く場所は、アプリのプロジェクトのディレクトリ。
Docker環境ならコンテナの中から行う。
ジャンプできる目次
やり方
例としてUsersテーブルに何かしらのレコードを追加したい場合なら、
php artisan make:seed UserTableSeeder
のようなコマンドを叩く。
UserTableSeederでも、UsersTableSeederでもどっちでもいい。
あくまでただのファイル名の話なので。
//プロジェクトディレクトリ/database/seeders/UserTableSeeder.php
use Illuminate\Support\Facades\DB;//追記
use DateTime;//追記(現在の日時を取得したいなら必要)
class UserTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
//追記
DB::table('users')->insert([//ここは正確なテーブル名
'name' => 'yamada',
'email' => 'yamada@yahoo.co.jp',
'password' => '$2y$10$lMS.w4oNg0PPeewefwea',//暗号化後のパスワード
'role'=>'administrator',
'created_at' => new DateTime(),
'updated_at' => new DateTime(),
]);
}
}
created_atとupdated_atも指定しないとnullになってしまう。
別にnullで構わないなら指定しなくてもいい。
【laravel】シーダーにtimestamp()を付する - Qiita
複数のレコードを登録したい場合は、この記事を参考に。(外部サイト)
Laravel6.0(PHP7.3)+MySQL+Laradockで簡易的なECサイトを作る②|mukae|note
シーダーの存在を親ファイルに宣言して知らせる
<?php
//プロジェクトディレクトリ/database/seeders/DatabaseSeeder.php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
$this->call(UserTableSeeder::class);//追記
}
}
php artisan db:seed
で投稿する。
エラーになる場合
php artisan db:seedを叩いた後にエラーが出る場合。
A column was not found:
A column was not found: You might have forgotten to run your migrations. You can run your migrations using php artisan migrate
.
プロジェクトディレクトリ/database/seeders/UserTableSeeder.php
の
DB::table('users')->insert([
のusersの部分が正しいテーブル名になっているか確認が必要。
Class "Database\Seeders\DB" not found
のエラーが出る場合
プロジェクトディレクトリ/database/seeders/UserTableSeeder.php冒頭の
use Illuminate\Support\Facades\DB;
が抜けてる
LaravelのSeeder実行時に「Class 'Database\Seeders\DB' not found」エラーが出たときの対処法 - Qiita
Class "Database\Seeders\DateTime" not found
のエラーが出る場合
プロジェクトディレクトリ/database/seeders/UserTableSeeder.php冒頭の
use DateTime;
が抜けてる。
日時を取得するための
new DateTime()
関数を利用したければ必要になる。
よく気になるポイント
シーダーを反映させると投稿済みの既存のレコードは破壊されるのか
DB::table('rejected_reasons')->truncate();
の記述がシーダー付ファイルにあるかどうかによるかも。また調べる。
同じシーダーファイルに値を追記してもう一度反映させるとレコードがダブってしまうのか
DB::table('rejected_reasons')->truncate();
の記述がシーダー付ファイルにあるかどうかによるかも。また調べる。
モデルにカラム編集を許可する記述は必要か
Users.phpなどに
protected $fillable = [
'name',
'email',
'password',
'icon',
'created_at',
'updated_at',
'role',
];
のようにいちいち許可設定を書く必要があるか
↓
いらん。
fillableとかはあくまでブラウザとかから投稿するときの話なので。