2016-11-04 3 views
0

ich für eine Eins-zu-Eins-Einsatz solchen Code kam:Does Modell :: erstellen db Transaktion macht

$anotherPet = \App\Pet::create($data); 
$anotherUser = \App\User::create($data); 
$anotherPet->user()->associate($anotherUser); 

$anotherPet->save(); 

Hat create() einen Anruf zu db machen oder die Transaktion auf save() gemacht wird?

3 vs 1 Anrufe?

Schätzen Sie Ihre freundliche Hilfe.

Antwort

1

Angenommen, Sie Laravel verwenden, erstellen Sie tut eine Transaktion, wenn Sie nur eine Sie können eine neue Instanz tun erstellen und es so füllen:

$anotherPet = new \App\Pet; 
$anotherPet->fill($data); 
$anotherUser = \App\User::create($data); // transaction is made here; mandatory to have an id for your association 

$anotherPet->user()->associate($anotherUser); // no transaction 
$anotherPet->save(); // transaction is made here 

diese Weise können Sie zwei Fragen haben anstelle von 3, Ich kann es nicht in einer einzigen Abfrage erstellen, ohne dass eine Fremdschlüsseleinschränkung fehlschlägt.

+0

Sie sind 2 Instanzen und Fremdschlüssel Einschränkungen sind beteiligt, deshalb habe ich zu diesem Muster kam :( Kann ich() 'mit' fill() '? –

+0

in diesem Fall müssen Sie das Objekt speichern Sie möchten vor dem Zuordnen assoziieren, sonst haben Sie keinen Primärschlüssel Ich habe die erste Antwort aktualisiert –

Verwandte Themen