2016-12-14 63 views
4

我已经创建了一个用于更新数据到数据库的代码,但是我得到如下所示的错误。当我使用dd()调试代码时,该值为true。 我的save()方法有什么问题?Laravel错误:方法保存不存在

BadMethodCallException in Macroable.php line 74: 保存方法不存在。

这是我的控制器

public function update(Request $request, $id) 
{ 

/* 
<---- this line is my another code ----> 
*/ 

    $input = Input::all(); 
    $servicedata = $input['service_id']; 
    $employeedata = $input['emp_id']; 

    foreach ($servicedata as $key => $val) { 
     $detailservice = DetailServiceOrder::find($request->detail_service_id); 
     $detailservice->sales_order_id = $request->sales_order_id; 
     $detailservice->service_id = $input['service_id'][$key]; 
     $detailservice->order_type = $input['order_type'][$key]; 
     $detailservice->select_plan = $input['select_plan'][$key]; 
     $detailservice->qty = $input['qty'][$key]; 
     $detailservice->unit_price = $input['unit_price'][$key]; 
     $detailservice->note = $input['note'][$key]; 
     $detailservice->save(); 
    } 

    foreach ($employeedata as $key => $val) { 
     $detailemployee = DetailEmployeeOrder::find($request->detail_employee_id); 
     $detailemployee->sales_order_id = $request->sales_order_id; 
     $detailemployee->employee_id = $input['emp_id'][$key]; 
     $detailemployee->mandays = $input['mandays'][$key]; 
     $detailemployee->save(); 
    } 
} 
+0

我的猜测是,'DetailServiceOrder :: find'未发现任何 – apokryfos

回答

0

$detailservice为空,我认为,你应该检查它是否为空或不

if (! $detailservice) continue; 
+0

,但是当我检查使用'DD($ detailservice)'的值不为空 – rafitio

+1

在这里看到此链接: http://stackoverflow.com/questions/35896756/method-save-does-not-exist-when-saving-laravel-5-2-model –

1

也许尝试不同的方法?

public function update(Request $request, $id) 
{ 

/* 
<---- this line is my another code ----> 
*/ 

    $input = Input::all(); 
    $servicedata = $input['service_id']; 
    $employeedata = $input['emp_id']; 

    foreach ($servicedata as $key => $val) { 
     DetailServiceOrder::where('detail_service_id', $request->detail_service_id)-> 
      update(['sales_order_id' = $request->sales_order_id, 
        'service_id' = $input['service_id'][$key], 
        'sales_order_id' = $request->sales_order_id, 
        'order_type' = $input['order_type'][$key], 
        'select_plan' = $input['select_plan'][$key], 
        'qty' = $input['qty'][$key], 
        'unit_price' = $input['unit_price'][$key], 
        'note' = $input['note'][$key] ]);    
    } 

    foreach ($employeedata as $key => $val) { 
     DetailEmployeeOrder::where('detail_employee_id', $request->detail_employee_id)-> 
      update(['sales_order_id' = $request->sales_order_id,       
        'employee_id' = $input['emp_id'][$key], 
        'mandays' = $input['mandays'][$key] ]);     
    } 
} 

在这种情况下你不需要检查记录存在,因为它不使用save()方法。

如需更多帮助,检查this

希望它有帮助

+0

它的工作,但现在的问题是保存的数据只有最后的数据, foreach似乎不起作用 – rafitio

+0

它应该工作。 'Foreach'看起来不错,所以我不明白这个代码的问题在哪里? – KuKeC

2

你应该经常检查查询是否返回null。使用is_nullempty()

foreach ($servicedata as $key => $val) { 
    $detailservice = DetailServiceOrder::find($request->detail_service_id); 
    if (!is_null($detailservice)) { 
     $detailservice->sales_order_id = $request->sales_order_id; 
     $detailservice->service_id = $input['service_id'][$key]; 
     $detailservice->order_type = $input['order_type'][$key]; 
     $detailservice->select_plan = $input['select_plan'][$key]; 
     $detailservice->qty = $input['qty'][$key]; 
     $detailservice->unit_price = $input['unit_price'][$key]; 
     $detailservice->note = $input['note'][$key]; 
     $detailservice->save(); 
    } 
} 

foreach ($employeedata as $key => $val) { 
    $detailemployee = DetailEmployeeOrder::find($request->detail_employee_id); 
    if (!is_null($detailemployee)) { 
     $detailemployee->sales_order_id = $request->sales_order_id; 
     $detailemployee->employee_id = $input['emp_id'][$key]; 
     $detailemployee->mandays = $input['mandays'][$key]; 
     $detailemployee->save(); 
    } 
} 
+0

嗨,我一直在跟踪你的方式,但它仍然是错误的 – rafitio

相关问题