2017-03-11 16 views
0

Ich habe eine Tabelle, wo ich user_id und role_id drin habe. Wenn ich nun user_id = 1 aus Dropdown und role_id = 2 aus Dropdown auswähle und es speichere .. Nächstes Mal wenn ich denselben Benutzer eine andere Rolle setzen möchte, anstatt eine neue Zeile in der Tabelle zu erstellen..Wie kann ich sie aktualisieren, ohne eine neue zu erstellen? Kann jemand etwas vorschlagen?Laravel eloquent: Wie Daten zu aktualisieren, wenn vorhanden

Ich habe die firstOrNew-Methode verwendet, aber es erstellt einen neuen Eintrag, anstatt den alten zu aktualisieren.

+0

So ein 'User' kann man mehr Datensatz einfügen nur 1' Rolle '?? –

+0

Ja .. Benutzer haben nur eine Rolle – Hola

+0

Warum verwenden Sie eine Pivot-Tabelle, wenn ein Benutzer nur eine Rolle haben kann? – Hammerbot

Antwort

0

$roleUser = RoleUser::firstOrNew(array('role_id' => Input::get('role_id'))); $roleUser ->save();

Sie mehrere Felder ..

Beispiel hinzufügen können ..

Wenn ein Flug von Oakland nach San Diego da ist, legen den Preis zu $ ​​99. Wenn kein passendes Modell existiert, erstellen Sie eins.

$flight = App\Flight::updateOrCreate( ['departure' => 'Oakland', 'destination' => 'San Diego'], ['price' => 99] ); `

1

Hier ist ein Code, der funktionieren sollte. Allerdings verstehe ich Ihre Datenbankarchitekturauswahl nicht ganz. Wenn ein Benutzer nur eine Rolle haben kann, definieren Sie in Ihrer Tabelle role_id einen role_id und verwenden Sie dann eine belongsTo Beziehung?

$role_user = RoleUser::where('role_id',$request->get('role_id')) 
    ->where('user_id',$request->get('user_id')) 
    ->first(); 

if (is_null($role_user)) { 
    RoleUser::create([ 
     'user_id' => $request->get('user_id'), 
     'role_id' => $request->get('role_id') 
    ]) 
} 
1

also wo ist das Problem hier?

Sie verwenden firstOrNew Methode, die zu firstOrCreate typischerweise ähnlich ist wie folgt vorgehen:

  • Wählen Sie aus der Datenbank

  • und wenn nicht vorhanden

  • legen Sie die angegebenen Daten

  • im Falle der Verwendung von FirstOrNew, werden Sie ne Ed auf ->save(), um die Abfrage auszuführen.

so wird es Ihre Daten nicht aktualisieren, wenn vorhanden.

jedoch denke ich, dass Sie nach updateOrCreate Methode suchen, die zwei Array-Argumente, die erste ist die eingefügten Daten, und wenn vorhanden ist, übernimmt die Funktion die beiden Array-Argument, um Ihre Zeile zu aktualisieren.

Sie können auch auf Situationen stoßen, in denen Sie ein vorhandenes Modell aktualisieren oder ein neues Modell erstellen möchten, wenn keines existiert. Laravel bietet eine updateOrCreate-Methode, um dies in einem Schritt zu tun. Wie die firstOrCreate Methode, bleibt updateOrCreate das Modell, so gibt es keine Notwendigkeit speichern() aufzurufen:

$roleUser = RoleUser::updateOrCreate(
    // if not exists, insert the following RoleUser data 
    ['role_id' => $request->Input(['role_id']),'user_id' =>$request->Input(['user_id'])], 
    // otherwise, update RoleUser set role_id = ? 
    ['role_id' => $request->Input(['role_id'])] 
); 
+0

Sehen Sie die Situation ist, wenn ich einen Benutzer als Admin nächstes Mal wähle, wenn ich den gleichen Benutzer als Benutzer wähle, sollte es Admin zu Benutzer aktualisieren, keine neue Reihe in der Tabelle zu schaffen. Mögen Sie meine Logik nicht mögen aber ich möchte verwenden Dies ist der Fall, wenn ein Benutzer als Administrator ausgewählt wurde und wenn derselbe Benutzer das nächste Mal als Benutzer in der Datenbank auswählt, wird er sowohl Administrator- als auch Benutzerrolle haben. – Hola

+0

Überprüfen Sie Ihre 'RoleUser'-Beziehungsregeln oder fügen Sie der Abfrage where-Klausel hinzu, um die' user_id' zu spezifizieren; – hassan

2

ich diesen Quellcode bin mit, wenn Update oder neuen Datensatz anlegen. Arbeitete gut mit Laravel 5.2

Wenn ein Datensatz existiert haben user_id == Ihre user_id => Wird role_id

Else aktualisieren für Ihre user_id

$roleUser = RoleUser::updateOrCreate([ 
    'user_id' => $request['user_id'], 
    ], 
    [ 
     'role_id' => $request['role_id'], 
    ]); 
+0

gut..ich denke das auch korrekt ..! –

+0

'Spalte nicht gefunden: 1054 Unbekannte Spalte 'id' in 'where-Klausel' (SQL: update' role_user' Satz 'role_id' = 2 wobei' id' null ist. Ich habe diesen Fehler ... nachdem ich Ihre Lösung verwendet habe – Hola

+0

@ Hola Ihr Tisch hat keine ID-Spalte? –

Verwandte Themen