2017-07-08 6 views
3

Für die folgende Werksdefinition muss die Spalte order fortlaufend sein. Es gibt bereits eine Spalte id, die automatisch inkrementiert wird. Die erste Zeile des order sollte 1 und jede zusätzliche Reihe Anfang order sollte die nächste Nummer (1, 2, 3, etc.) seinLaravel Factory: Manuelles Erhöhen der Spalte

$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 
    ]; 
}); 

Es sollte die order Spalte werden Einstellung der vorherigen Zeile zu 1 mehr als es führt jedoch dazu, dass alle Zeilen 1 zugewiesen werden.

+0

Sind Sie damit einverstanden, doppelte Werte für das Auftragsfeld zu erhalten? Diese Lösung verhindert Rennbedingungen nicht. –

Antwort

8

Hier ist etwas, das funktionieren könnte.

$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++ 
    ]; 
}); 

Es behält nur einen internen Zähler zu dieser Funktion bei.

Verwandte Themen