2017-04-05 84 views
1

工作,我要更新laravel 5.4Laravel UpdateOR创建不与关系

我的代码

$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], 
     ]); 
    } 
} 

这里永远是我的代码proposalService创建一个新的行而不是更新我的相关表格。 如何创建新的和更新(如果存在)。

+0

什么是您更新的组合键?我的意思是你在这里使用的所有属性? – mrabbani

回答

0

updateOrCreate()需要2个参数(2个数组)。第一个数组,你传递你想检查的元素,通常是主键和其他元素。然后它检查这些元素是否存在,否则,创建一个新元素。

$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] 
    ] 
); 

在这里,我用service_item_idservice_type_id作为第一个参数,以检查它们是否已经存在。