こんにちは、エリカです。
たとえば、拠点コードみたいなものを登録をしたいときや、開発時にテストデータを登録するとき……、「Laravel」では、シーディング機能を使って簡単に用意することができるんです。今回は、その基本的な使用方法を一部ご紹介したいと思います。
クエリビルダを利用して直接テーブルに挿入する場合
名前、メールアドレス、パスワードというカラムを持つusersというテーブルがあったとします。
このテーブルに直接挿入するシーダークラスを作成してみましょう。
御多分にもれず、アルチザンで簡単に雛形を作成することができます。
$ php artisan make:seeder UsersTableSeeder
下記が、database/seeds/UsersTableSeeder.php
に作成されます。
<?php
use Illuminate\Database\Seeder;
class UsersTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
// ここに挿入する内容を記述
}
}
ここに下記を記述します。
public function run()
{
DB::table('users')->insert([
'name' => str_random(10),
'email' => str_random(10).'@gmail.com',
'password' => bcrypt('secret'),
]);
}
以下のコマンドを実行し、Composerのオートローダを再生し、シーダーを実行可能にします。
$ composer dump-autoload
シーダーを実行します。
$ artisan db:seed --class=UsersTableSeeder
ここで、usersテーブルを確認すると、ランダムな名前、メールアドレス、パスワードでデータが挿入されています。
モデルファクトリを利用する場合
大量に登録する場合は、モデルファクトリを利用して登録すると便利です。
こちらもまずは雛形を作成します。
$ artisan make:factory UserFactory --model=User
下記が、database/factories/UserFactory.php
に作成されます。
<?php
use Faker\Generator as Faker;
$factory->define(App\User::class, function (Faker $faker) {
return [
// ここに挿入する内容を記述
];
});
ここでも名前、メールアドレス、パスワードをランダムに生成します。
return [
'name' => $faker->name,
'email' => $faker->unique()->safeEmail,
'password' => Hash::make($faker->password()),
];
また、先ほどのシーダークラスの中身をモデルファクトリを利用するように書き換えます。
database/seeds/UsersTableSeeder.php
public function run()
{
factory(App\User::class, 100)->create();
}
シーダーを実行します。
$ artisan db:seed --class=UsersTableSeeder
これで、モデルファクトリを利用して100件のデータが挿入されます。
なお、コンフィグファイルに下記を追記すると日本語でデータが作成されます。
config/app.php
'faker_locale' => 'ja_JP',
シーダーをまとめて実行するには
database/seeds/DatabaseSeeder.php
に、実行するシーダーを指定します。
<?php
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$this->call(UsersTableSeeder::class);
$this->call(FooTableSeeder::class);
$this->call(BarTableSeeder::class);
}
}
こうすることにより、下記のようなマイグレーションコマンドで、シーダーもまとめて実行することができます。
$ artisan migrate:refresh --seed
まとめ
いかがでしたか? コードを書いて簡単にダミーデータを用意できるのはうれしいですよね!
こうした機能も洗練されているあたり、さすが「Laravel」といったところ。みなさんもぜひ試してみてくださいね。
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。