開発において必須のテストデータの流し込みの備忘録です。。。
※データベース、モデル、マイグレーション完了時からのお話です。
Factoryを作る
php artisan make:factory [モデル名]Factory
例)
php artisan make:factory RecipeFactory
↑クラス名は大文字注意
<?php
/** @var \Illuminate\Database\Eloquent\Factory $factory */
use App\Model;
use Faker\Generator as Faker;
$factory->define(Model::class, function (Faker $faker) {
return [
//
];
});
こういうのができます。
//のところに入れたいデータを書き込んでいきましょう
<?php
/** @var \Illuminate\Database\Eloquent\Factory $factory */
use App\Recipe; ←ここ要書き換え!!
use Faker\Generator as Faker;
$factory->define(Recipe::class, function (Faker $faker) {
return [ ↑ここも要書き換え!!
'user_id' => $faker->numberBetween($min = 1, $max = 10),
'name' => $faker->realText($maxNbChars = 10, $indexSize = 1),
'liqueur' => $faker->numberBetween($min = 1, $max = 10),
'time' => $faker->numberBetween($min = 1, $max = 10),
'invention' => $faker->numberBetween($min = 1, $max = 10),
];
});
ここで気を付けたいのは
use App\Model;
を書き換えること!
矢印で示しておきました。
ここでモデルを指定してあげないと
InvalidArgumentException : Unable to locate factory with name [default] [App\Recipe].
てな感じでエラーが出ちゃいます(><)
Seederを作る
$php artisan make:seeder [ファイル名]
例)
php artisan make:seeder RecipesTableSeeder
こんな感じ
デフォルトで入っているUsersTableSeederを参考にしてみてください。
<?php
use Illuminate\Database\Seeder;
class AdminTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
//
}
}
中身はこんな感じ
function run()の中に、Factoryでダミーデータ何個作るかを記述する。
<?php
use Illuminate\Database\Seeder;
class RecipesTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
factory(\App\Recipe::class, 10)->create();
}
}
これで10個データができます
最後に、、、
DatabaseSeeder.phpの更新
<?php
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
$this->call(UsersTableSeeder::class); ←元から入ってるよ
$this->call(RecipesTableSeeder::class); ←こいつを追加
}
}
ラスト
$php artisan db:seed
で実行
あれなんかおかしいよって人は
composer dump-autoload
試してみてください。