2016-01-22 148 views
0

我在更新和創建相關記錄方面存在問題,具體取決於它們是否存在。如果不存在,我想更新成分,如果不將成分插入數據庫並將其與當前膳食聯繫起來。laravel插入或更新相關記錄

public function update($id) 
{ 
    $meal = Meal::find($id); 
    $meal->name = Input::get('name'); 

    // create ingredients 
    $ingredients = Input::get('ingredient'); 
    $meal_ingredients = array(); 

    foreach($ingredients as $ingredient) 
    { 
     $meal_ingredients[] = new Ingredient(array(
      'name' => $ingredient['name'], 
      'unit' => $ingredient['unit'], 
      'quantity' => $ingredient['quantity'] 
     )); 
    } 

    //save into the DB 
    $meal->save(); 
    $meal->ingredients()->saveMany($meal_ingredients); 

    // redirect 
    Flash::success('Votre repas a bien été mis à jour!'); 
    return Redirect::to('/meals'); 
} 
+0

您收到的錯誤是什麼?如果你想改變內情,你爲什麼改變這個名字? –

回答

0

步驟1:獲取膳食

$meal = Meal::find($id); 

步驟2:獲取膳食的成分(創建此關係)

$ingredients = $meal->ingredients; 

步驟3:比較輸入到電流和添加不存在

$new_ingredients = array(); 

foreach($ingredients as $ingredient) 
{ 
    if(!in_array($ingredient->toArray(), Input::get('ingredient')) { 
     $new_ingredients[] = new Ingredient(array(
     'name' => $ingredient['name'], 
     'unit' => $ingredient['unit'], 
     'quantity' => $ingredient['quantity'] 
    )); 
    } 
} 

Ste第4頁更新

$meal->ingredients->saveMany($new_ingredients); 

確保你有吃飯的關係和成分正確

+0

這兩個工作表示感謝!更詳細,所以我會投這個 – Snake

0

可以使用firstOrNew()方法。您將它傳遞給一組數據,並且它將返回與該數據匹配的第一條記錄,或者如果找不到記錄,則會返回一個新類的實例,其中已經設置了搜索字段。

foreach($ingredients as $ingredient) 
{ 
    $meal_ingredients[] = Ingredient::firstOrNew(array(
      'name' => $ingredient['name'], 
     ))->fill(array(
      'unit' => $ingredient['unit'], 
      'quantity' => $ingredient['quantity'] 
     )); 
} 
+0

作品太謝謝了! – Snake