2014-12-15 12 views
6

Mein Zweck ist Update, wenn der Wert existiert, sonst fügt eine neue Zeile in der Datenbanktabelle nach dem Absenden des Formulars.Laravel updateOrCreate mit automatisch inkrementeller Datenbank

Das Problem ist, die Funktion hier fügt neue Spalten in db-Tabelle statt sie zu aktualisieren.

Hier ist meine Funktion:

MyModel::updateOrCreate(array(
    'myField' => 'myValue', 
)) 
    ->where('myAutoIncrementalField', '=', '5') 
    ->where('myPrimaryKey', '=', '8'); 

ist mein Datenbank-Tabelle wie folgt aus:
1. myPrimaryKey (nicht automatisch inkrementelle und befüllbar ist auf Modell.)
2. myAutoIncrementalField (auto inkrementelle und kann nicht sein, befüllbar am Modell.)

Vielen Dank im Voraus.

Antwort

22

Dies ist, wie Sie diese Methode verwenden:

Model::updateOrCreate(
    ['primary_key' => 8], 
    ['field' => 'value', 'another_field' => 'another value'] 
); 

Als erstes param eine Reihe von Feldern übergeben, die einzigartig sind, oder in Ihrem Fall der Primärschlüssel. Nicht-eindeutige Felder ergeben hier offensichtlich keinen Sinn, genauso wenig wie die Weitergabe von PK.

2. Parameter ist ein Array von Werten, die ebenfalls aktualisiert/erstellt werden sollten, aber in der unique/PK-Suche ignoriert werden.

+0

Es funktioniert. Das ist genau das, was ich wollte. Ich konnte keine Dokumentation in Laravel API oder Dokumente finden, wenn Sie die Art teilen, wie man diese Art von Problemen analysiert, würde ich geschätzt werden. Danke für Ihre Hilfe. –

+0

Nun, ich kenne eloquente Ins und Outs. Aber wenn nicht, würde ich wahrscheinlich die Datei 'vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php' öffnen und die Quelle überprüfen. Laravel Quelle hat so ziemlich alles in den Kommentaren. Die Codebasis wird viel häufiger aktualisiert als die Dokumente, so dass Sie nicht alles in der Dokumentation auf der Laravel-Website finden, aber Sie haben die Quelle immer zur Hand. –

1

Sie können nicht verwenden, wo Funktionen mit dieser Methode. Sie müssen die where-Klauseln in das Array einschließen.

MyModel::updateOrCreate(array(
    'myField' => 'myValue', 
    'myAutoIncrementalField' => '5', 
    'myPrimaryKey' => '8' 
)); 
+0

Ich habe diese Idee bisher versucht, aber updateOrCreate sieht nicht nach myAutoIncrementalField Wert. Der Wert von myAutoIncrementalField stammt von einer Variablen, bei der es sich um einen inkrementellen Wert für eine for-Schleife handelt. Ich überprüfe es und lasse Sie für neue Tests wissen. –

+0

Wo haben Sie die Existenz dieser Funktion gefunden? Ich kann es nirgendwo in der Dokumentation oder API finden. – Jerodev

+0

Sie können in Laravel API nach Model :: updateOrCreate suchen. –

Verwandte Themen