firstOrCreate()
prüft, ob alle Argumente vorhanden sind, bevor finds
eine Übereinstimmung vorliegt . Wenn nicht alle Argumente übereinstimmen, wird eine neue Instanz des Modells erstellt.
Wenn Sie nur ein bestimmtes Feld überprüfen möchten, verwenden Sie es firstOrCreate(['field_name' => 'value'])
mit nur einem Element im Array. Dies gibt das erste übereinstimmende Element zurück oder erstellt ein neues, wenn keine Übereinstimmungen gefunden werden.
Der Unterschied zwischen firstOrCreate()
und firstOrNew()
:
firstOrCreate()
erstellt automatisch einen neuen Eintrag in der Datenbank, wenn keine Übereinstimmung gefunden wird. Andernfalls erhalten Sie den passenden Artikel.
firstOrNew()
Sie erhalten eine neue Modellinstanz, mit der Sie arbeiten können, wenn keine Übereinstimmung gefunden wurde. Sie wird jedoch nur dann in der Datenbank gespeichert, wenn Sie dies explizit tun (Aufruf save()
des Modells). Andernfalls erhalten Sie den passenden Artikel.
Die Wahl zwischen dem einen oder anderen hängt davon ab, was Sie tun möchten. Wenn Sie die Modellinstanz ändern möchten, bevor sie zum ersten Mal gespeichert wird (z. B. Festlegen eines name
oder eines Pflichtfelds), sollten Sie verwenden firstOrNew()
. Wenn Sie die Argumente nur verwenden können, um sofort eine neue Modellinstanz in der Datenbank zu erstellen, ohne sie zu ändern, können Sie sie verwenden firstOrCreate()
.
$user = User::firstOrCreate(array('email' => Input::get('email'), 'name' => Input::get('name')))
.Die vorherige Antwort ist veraltet. Es ist möglich, in einem Schritt zu erreichen, da Laravel 5.3
firstOrCreate
jetzt über einen zweiten Parameter verfügtvalues
, der für neue Datensätze verwendet wird, jedoch nicht für die Suche$user = User::firstOrCreate([ 'email' => '[email protected]' ], [ 'firstName' => 'Taylor', 'lastName' => 'Otwell' ]);
quelle
protected $fillable
im entsprechenden Modell hinzugefügt werden müssen, da die Massenzuweisung verwendet wird.updated_at
,created_at
) VALUES ...Ein Update:
Ab Laravel 5.3 ist dies in einem einzigen Schritt möglich. Die
firstOrCreate
Methode akzeptiert jetzt ein optionales zweites Array als Argument.Das erste Array-Argument ist das Array, auf dem die Felder / Werte übereinstimmen, und das zweite Array sind die zusätzlichen Felder, die bei der Erstellung des Modells verwendet werden sollen, wenn keine Übereinstimmung über die Übereinstimmung der Felder / Werte im ersten Array gefunden wird:
Siehe Dokumentation
quelle
firstOrCreate () prüft, ob alle Argumente vorhanden sind, bevor eine Übereinstimmung gefunden wird.
Wenn Sie nur ein bestimmtes Feld überprüfen möchten, verwenden Sie firstOrCreate (['Feldname' => 'Wert']) wie
$user = User::firstOrCreate([ 'email' => '[email protected]' ], [ 'firstName' => 'abcd', 'lastName' => 'efgh', 'veristyName'=>'xyz', ]);
Dann wird nur die E-Mail überprüft
quelle