2016-05-25 7 views
0

Ich möchte eine Operation ähnlich der folgenden durchführen, wobei die Attribute des Objekts, das ich erstelle, von den Attributen des vorherigen Objekts abhängt.Wie führe ich Aktualisierungs- und Speicheroperationen in Eloquent aus, die von der letzten Zeile einer Tabelle abhängig sind?

Wie führen Sie die erforderliche Sperre in Eloquent durch, um sicherzustellen, dass Zeile 1 jeweils nur mit einer Transaktion ausgeführt wird?

Welchen anderen Code muss ich hinzufügen oder bearbeiten, um sicherzustellen, dass zwei Objekte nicht die gleichen attr1 und attr2 haben, wenn Zeile 1 für beide Objekte ausgeführt wird, bevor eines der Objekte gespeichert wird.

+0

Rückgabe Model :: orderBy ('id', 'desc') -> first(); Können Sie bitte überprüfen Sie mit dieser –

+0

Holen Sie sich die letzte Zeile selbst ist nicht das Problem, obwohl. Lass mich das klären. –

Antwort

0

Mit dieser Methode können Sie Ihre für einen Schlüssel suchen, die auf der Linie 1. So auch vor Zeile erstellt 2, wenn ein anderes Objekt zugeordnet ist niedriger als der Schlüssel ist, wird es nicht sein, in Ihrer Suche nach Zeile 2 berücksichtigt.

$new_object = Model::create([]); 

$last_row = Model::where("id","<",$new_object->id")->orderBy('id', 'desc')->first(); 

$new_object->attr1 = $last_row->id + 1 
$new_object->attr2 = $last_row->id + 2 

$new_object->save() 

Sie könnten auch den Zeitstempel verwenden, um nach dem neuesten erstellten Objekt zu suchen. Wenn Ihr Modell Zeitstempel hat.

+0

Ist es möglich, dass zwei Objekte erstellt werden, bevor Zeile 2 ausgeführt wird? –

+0

Ja, aber beachten Sie, dass wir nach einem Schlüssel suchen, der niedriger ist als der in Zeile 1 zugeordnete Schlüssel. Selbst wenn ein anderes Objekt vor Zeile 2 erstellt wird, wird es in Ihrer Suche nach Zeile 2 nicht berücksichtigt. –

+0

Wahr. Es löst das Problem wie beschrieben. –

0

Dies sollte funktionieren:

$last_row = Model::orderBy('id', 'desc')->first(); 
$new_object = new Model() 
for(i=1 i>3 i++){ 
$new_object.attr[i] = $last_row->id + [i] 
$new_object->save()}