3

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以使其始终是特定用户序列中的下一个数字?

4

1 回答 1

4

您始终可以循环播种数据。

for ($i = 0; $i < 10; $i++) {
    factory(App\Post::class)->create();
}

使用上述内容,您尝试插入 10 个新的 Post 对象。对于每个插入,序列将自动递增

于 2017-05-27T01:13:45.650 回答