我在User
和Post
之间存在一对多的关系。我正在使用数据库播种机和工厂来生成虚假数据。我想生成类似的数据到下表。
用户
user_id | name
------- | ------
1 | Tim
发表
post_id | FK:user_id | order
--------|--------------|-------
1 | 1 | 0
2 | 1 | 1
3 | 1 | 2
4 | 1 | 3
为此,我创建了一个工厂,用于选择随机用户并计算与该用户关联的帖子数
$factory->define(App\Post::class, function (Faker\Generator $faker) {
$user = App\User::inRandomOrder()->firstOrFail();
$order = Post::where(['user_id' => $user->user_id])->count();
return [
'user_id' => $user->user_id,
'order' => $order,
];
});
种子2后产生。
post_id | FK:user_id | order
--------|--------------|-------
1 | 1 | 0
2 | 1 | 0
再播种2次
3 | 1 | 2
4 | 1 | 2
在我看来,Laravel在运行查询之前会生成所有插入语句。因此Post::where(['user_id' => $user->user_id)->count();
不会按预期增加。
如何递增Post.order
以使其始终是特定用户序列中的下一个数字?
答案 0 :(得分:1)
您始终可以循环播种数据。
for ($i = 0; $i < 10; $i++) {
factory(App\Post::class)->create();
}