2017-04-05 3 views
1

Ich möchte auf meine verwandten Tabelle aktualisieren Laravel 5.4Laravel UpdateOR arbeiten Erstellen nicht mit Beziehung

meinen Code

$id = $request->id; 

$find = Presal::find($id); 
$find->user_id = $request->customer_id; 
$find->proposalid = $request->proposalid; 
$psal = $find->save(); 

if ($psal) { 
    foreach ($request->service_item_id as $key => $n) { 
     $find->proposalService()->updateOrCreate([ 
      'service_item_id' => $request->service_item_id[$key], 
      'start_date'  => $request->start_date[$key], 
      'end_date'  => $request->end_date[$key], 
      'service_type_id' => $request->service_type_id[$key], 
      'vendor_submit' => $request->vendor_submit[$key], 
     ]); 
    } 
} 

Hier immer eröffne mein Code, um eine neue Zeile in proposalService aber nicht aktualisieren. Wie kann ich erstellen, wenn neu und Update wenn vorhanden.

+0

Was ist Ihr zusammengesetzter Schlüssel zum Aktualisieren? Ich meine alle Attribute, die du hier benutzt hast? – mrabbani

Antwort

0

updateOrCreate() benötigt 2 Argumente (2 Arrays). Beim ersten Array übergeben Sie das Element, das Sie überprüfen möchten, normalerweise den Primärschlüssel und ein anderes Element. Es prüft dann, ob diese Elemente vorhanden sind, andernfalls erstellen Sie ein neues Element.

$find->proposalService()->updateOrCreate(
    [ 
     'service_item_id' => $request->service_item_id[$key], 
     'service_type_id' => $request->service_type_id[$key] 
    ], 
    [ 
     'start_date' => $request->start_date[$key], 
     'end_date' => $request->end_date[$key], 
     'vendor_submit' => $request->vendor_submit[$key] 
    ] 
); 

Hier verwendete ich service_item_id und service_type_id als erstes Argument zu überprüfen, ob sie bereits vorhanden sind.