有许多同名的问题,但与所提出的问题有不同的解决方案。所以也许我也正在解决这个错误。
我想在工厂使用$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
,然后再次覆盖它是一个小技巧。我该如何摆脱这种丑陋的方式?