forget for get

覚えるために忘れる

LaravelのSeederで関連テーブルの値を入れてダミーデータを作成

最初に関連テーブルの全データを取得しておいて、
ダミーデータ作成時に、取得しておいた全データからランダムにデータを取得して利用する。

$users = App\User::select('id','name')->get();
$factory->define(App\Post::class, function ($faker) use ($users) {
    $user = $users->random();
    return [
        'user_id' => $user->id,
        'user_name' => $user->name,
        'title' => $faker->sentence,
        'body' => $faker->paragraph,
        'post_datetime' => $faker->dateTimeThisMonth
    ];
});

 

・以下、ダメなパターン
1つのダミーデータ作るためにUser全検索が毎回されるのは無駄で時間がかかるのでボツ

$factory->define(App\Post::class, function ($faker) {
    return [
        'user_id' => App\User::all(['id'])->random(),
        'user_name' => App\User::all(['name'])->random(),
        'title' => $faker->sentence,
        'body' => $faker->paragraph
    ];
});