イントロダクションIntroduction
シーダー(初期値設定)クラスを使用し、テストデーターをデーターベースに設定するシンプルな方法もLaravelには備わっています。全シーダークラスはdatabase/seeds
に保存されます。シーダークラスには好きな名前を付けられます。しかしUsersTableSeeder
などのような分かりやすい規則に従ったほうが良いでしょう。デフォルトとしてDatabaseSeeder
クラスが定義されています。このクラスからcall
メソッドを使い他の初期値設定クラスを呼び出すことで、値を設定する順番をコントロールできます。Laravel includes a simple method of seeding your database with test data using seed classes. All seed classes are stored in database/seeds
. Seed classes may have any name you wish, but probably should follow some sensible convention, such as UsersTableSeeder
, etc. By default, a DatabaseSeeder
class is defined for you. From this class, you may use the call
method to run other seed classes, allowing you to control the seeding order.
シーダークラス定義Writing Seeders
シーダーを生成するには、make:seeder
Artisanコマンドを実行します。フレームワークが生成するシーダーは全てdatabase/seeders
ディレクトリーに設置されます。To generate a seeder, you may issue the make:seeder
Artisan command[/docs/{{version}}/artisan]. All seeders generated by the framework will be placed in the database/seeders
directory:
php artisan make:seeder UsersTableSeeder
シーダークラスはデフォルトでrun
メソッドだけを含んでいます。このメソッドはdb:seed
Artisanコマンドが実行された時に呼びだされます。run
メソッドの中でデータベースに何でも好きなデーターを挿入できます。クエリービルダーでデータを挿入することも、もしくはEloquentモデルファクトリーを使うこともできます。A seeder class only contains one method by default: run
. This method is called when the db:seed
Artisan command[/docs/{{version}}/artisan] is executed. Within the run
method, you may insert data into your database however you wish. You may use the query builder[/docs/{{version}}/queries] to manually insert data or you may use Eloquent model factories[/docs/{{version}}/testing#model-factories].
例として、Laravelのインストール時にデフォルトで用意されているDatabaseSeeder
クラスを変更してみましょう。run
メソッドにデータベースINSERT文を追加します。As an example, let's modify the DatabaseSeeder
class which is included with a default installation of Laravel. Let's add a database insert statement to the run
method:
<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class DatabaseSeeder extends Seeder
{
/**
* データベース初期値設定の実行
*
* @return void
*/
public function run()
{
DB::table('users')->insert([
'name' => str_random(10),
'email' => str_random(10).'@gmail.com',
'password' => bcrypt('secret'),
]);
}
}
モデルファクトリーの利用Using Model Factories
もちろんそれぞれのモデルシーダーで属性をいちいち指定するのは面倒です。代わりに大量のデータベースレコードを生成するのに便利なモデルファクトリーが使用できます。最初にモデルファクトリーのドキュメントを読んで、どのように定義するのかを学んでください。ファクトリーが定義できれば、データベースにレコードを挿入するfactory
ヘルパ関数が利用できます。Of course, manually specifying the attributes for each model seed is cumbersome. Instead, you can use model factories[/docs/{{version}}/testing#model-factories] to conveniently generate large amounts of database records. First, review the model factory documentation[/docs/{{version}}/testing#model-factories] to learn how to define your factories. Once you have defined your factories, you may use the factory
helper function to insert records into your database.
例として50件のレコードを生成し、それぞれのユーザーへリレーションを付加してみましょう。For example, let's create 50 users and attach a relationship to each user:
/**
* データベース初期値設定の実行
*
* @return void
*/
public function run()
{
factory(App\User::class, 50)->create()->each(function($u) {
$u->posts()->save(factory(App\Post::class)->make());
});
}
追加のシーダー呼び出しCalling Additional Seeders
DatabaseSeeder
クラスの中で追加のシーダークラスを呼び出すcall
メソッドが使えます。call
メソッドを使うことで、圧倒されるぐらい大きな1ファイルを使う代わりに、データベースシーディングを複数のファイルへ分割できます。実行したいシーダークラス名を渡すだけです。Within the DatabaseSeeder
class, you may use the call
method to execute additional seed classes. Using the call
method allows you to break up your database seeding into multiple files so that no single seeder class becomes overwhelmingly large. Simply pass the name of the seeder class you wish to run:
/**
* データベース初期値設定の実行
*
* @return void
*/
public function run()
{
Model::unguard();
$this->call(UsersTableSeeder::class);
$this->call(PostsTableSeeder::class);
$this->call(CommentsTableSeeder::class);
Model::reguard();
}
シーダーの実行Running Seeders
シーダークラスを書き上げたら、データベースへ初期値を設定するためにdb:seed
Artisanコマンドが使えます。デフォルトでdb:seed
コマンドは、他のシーダークラスを呼び出すDatabaseSeeder
クラスを実行します。しかし特定のファイルを個別に実行したい場合は、--class
オプションを使いシーダーを指定してください。Once you have written your seeder classes, you may use the db:seed
Artisan command to seed your database. By default, the db:seed
command runs the DatabaseSeeder
class, which may be used to call other seed classes. However, you may use the --class
option to specify a specific seeder class to run individually:
php artisan db:seed
php artisan db:seed --class=UserTableSeeder
もしくはマイグレーションをロールバックし再実行するmigrate:refresh
コマンドを使っても、データベースに初期値を設定できます。このコマンドはデータベースを完全に作成し直したい場合に便利です。You may also seed your database using the migrate:refresh
command, which will also rollback and re-run all of your migrations. This command is useful for completely re-building your database:
php artisan migrate:refresh --seed