2017-07-08 65 views
3

对于以下出厂定义,列order需要是顺序的。已经有一列id自动递增。第一行的order应该开始在1和每个附加行的order应该是下一个号码(123等)Laravel Factory:手动增量列

$factory->define(App\AliasCommand::class, function (Faker\Generator $faker) { 
    return [ 
     'user_id' => App\User::inRandomOrder()->first()->id, 
     'command' => $faker->word, 
     'content' => $faker->sentence, 
     'order' => (App\AliasCommand::count()) ? 
      App\AliasCommand::orderBy('order', 'desc')->first()->order + 1 : 1 
    ]; 
}); 

应设置order柱比前一行1以上但是,它会导致所有行被分配为1

+0

您确定订单字段有重复值吗?这种解决方案不会阻止竞争条件。 –

回答

8

这是可能的工作。

$factory->define(App\AliasCommand::class, function (Faker\Generator $faker) { 
    static $order = 1; 
    return [ 
     'user_id' => App\User::inRandomOrder()->first()->id, 
     'command' => $faker->word, 
     'content' => $faker->sentence, 
     'order' => $order++ 
    ]; 
}); 

它只是保持该功能的内部计数器。