将数据从Seeder传递到Laravel的工厂

时间:2019-11-12 15:43:43

标签: laravel factory laravel-5.6

有许多同名的问题,但与所提出的问题有不同的解决方案。所以也许我也正在解决这个错误。

我想在工厂使用$user

在我的userStatsTableSeeder中,我使用user传递了user_id,因为我在工厂中将其覆盖。

$users = User::with('entries')
            ->has('entries')
            ->orderBy('id')
            ->get();

foreach ($users as $user) {

            $entries = $user->entries->pluck('id', 'id');

            if (sizeof($entries) === 0) {
                continue;
            }

            factory(UserStat::class)->states(['alltime'])->create([
                'user_id' => $user,
            ]);
}

UserStatFactory中:

$factory->define(UserStat::class, function (Faker $faker, $attributes) {

    $user = $attributes['user_id'];
    $entries = $user->entries;

    // Do some calculations


return [
        'type' => 'alltime',
        'win' => $total['win'],
        'lose' => $total['lose'],
        'streak' => $streak,
        // some more stats
        'created_at' => $date,
        'updated_at' => $date,
        'user_id' => $user->id,
    ];
});

实际的统计数据计算更为复杂,但是我简化了它们。我有这个“计算”表来减少很多查询。

user作为user_id传递给getPlaylistItem,然后再次覆盖它是一个小技巧。我该如何摆脱这种丑陋的方式?

0 个答案:

没有答案