2017-05-26 50 views
0

我在UserPost之间有一对多的关系。我正在使用数据库播种器和工厂来生成假数据。我想提供与下表相似的数据。在Laravel工厂使用型号

用户

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运行查询之前产生的所有INSERT语句。所以Post::where(['user_id' => $user->user_id)->count();不会按预期增加。

我该如何增加Post.order,以便它始终是特定用户序列中的下一个数字?

回答

0

您始终可以将数据植入循环中。

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