2017-07-08 6 views
3

次の工場出荷時の定義では、カラムorderは連続している必要があります。すでにインクリメントされている列idがあります。最初の行のorder1で開始すべきであり、各追加行の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 
    ]; 
}); 

前の行より1以上であることがorderカラムを設定しなければなりませんただし、すべての行に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++ 
    ]; 
}); 

これは、その機能の内部にカウンタを保持するだけです。

関連する問題