記事の内容
概要
シーディングは、データベースに初期データを自動で挿入するための仕組みです。
コマンド
【実行内容】
php artisan make:seeder シーディング名
シーダー定義
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class SampleSeeder extends Seeder
{
public function run()
{
// DBファサードを使用してデータを挿入
DB::table('テーブル名')->insert([
'カラム名' => 'データ',
]);
}
}
データ投入
【実行内容】
php artisan db:seed --class=シーダー名
例
シーダー作成
【実行内容】
// シーディング名を指定
php artisan make:seeder UsersTableSeeder
シーダー設定
作成されたシーダークラスに、挿入するデータを記述します。
【ファイル先】database/seeders/UsersTableSeeder.php
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use App\Models\User;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
class UsersTableSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
// テーブルを空にする
User::truncate();
// 10人分の仮データを挿入
for ($i = 0; $i < 10; $i++) {
User::create([
'name' => Str::random(10),
'email' => Str::random(10).'@example.com',
'password' => Hash::make('password'),
]);
}
}
}
シーダーを呼び出す
【ファイル先】database/seeders/DatabaseSeeder.php
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*/
public function run(): void
{
$this->call(UsersTableSeeder::class);
}
}
コマンドを実行
【実行内容】
php artisan db:seed
一覧
特定実行
【実行内容】
php artisan db:seed --class=特定のシーダー名
強制的に実行
本番環境などでシーダーを強制的に実行する場合に使用します。
【実行内容】
php artisan db:seed --force
データベース指定
デフォルトのデータベース接続以外を使用してシーダーを実行したい場合に使用します。
※connectionsを指定
【実行内容】
php artisan db:seed --database=sqlite
【ファイル先】config/database.php
return [
'default' => env('DB_CONNECTION', 'mysql'),
'connections' => [
'sqlite' => [
'driver' => 'sqlite',
'url' => env('DATABASE_URL'),
'database' => env('DB_DATABASE', database_path('database.sqlite')),
'prefix' => '',
'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
],
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
// 他の接続設定...
],
// 他の設定...
];
対話なし
シーディング中に対話的な入力をスキップしたい場合に使用します。
【実行内容】
php artisan db:seed --no-interaction