2016-06-24 15 views
0

Ich habe eine Tabelle "app_sessions" in meiner Datenbank mit zwei eindeutigen Schlüsseln - device_id und device_token. Ich möchte nur dann eine neue Sitzung in diese Tabelle einfügen, wenn der Datensatz mit device_id oder device_token nicht existiert, andernfalls muss nur die Sitzung für diesen Datensatz aktualisiert werden.auf doppelte Schlüsselaktualisierung in Laravel 5.0 eloquent

Wir können dies mit einer "einfügen .... auf doppelte Schlüsselaktualisierung ....." Abfrage. Aber wie können wir dies erreichen mit Laravel 5.0 eloquent.

Hinweis: Wir kennen alle anderen Möglichkeiten, wie den Datensatz zuerst zu holen und dann je nach den Ergebnissen einzufügen oder zu aktualisieren.

Antwort

0

https://laravel.com/api/5.2/Illuminate/Database/Eloquent/Builder.html#method_updateOrCreate

User::updateOrCreate(['email'=>'[email protected]'],['name'=>'foobar']); 

Dieser für einen Benutzer überprüfen wird das erste Array und dann entweder Update passend, dass oder mit dem zweiten Feld mit diesem Namen und E-Mail einen neuen Benutzer erstellen.

+0

Ich habe diesen Fehler: MassAssignmentException in Model.php Zeile 452: device_token. Wenn ich diese Funktion benutzte, behielt ich die Device_id gleich aber unterschiedliche Device_Token. Die Funktion updateOrCreate prüft jedoch die beiden Spalten (device_id und device_token) mit und condition. Jeff, bekommst du meine Frage? – janardhan

+0

Sie müssen 'device_token' im Array' $ fillable' des Modells haben, wenn Sie es mit einem Array aktualisieren möchten. Das erste Array sollte die Bedingungen sein, die Sie überprüfen möchten, wenn es bereits vorhanden ist, und das zweite Array ist das Array, das Sie aktualisieren möchten. – Jeff

+0

aber das funktioniert nicht, wenn wir zwei Bedingungen haben. Hier müssen wir überprüfen, ob 'device_id' existiert ** ODER **' device_token' existiert. Aber die 'updateOrCreate' Funktion akzeptiert nur' and condition'. – janardhan