2015-02-12 133 views
5

我有一個實體集,其中有很多項目。所以,在更新集合時,表單也會包含更新其項目的字段。我已經做到了,它運行良好,但我不確定它是否是正確和最有效/最優雅的方式。這裏是我的代碼:Laravel Eloquent - 保存/更新相關的一對多關係數據

 $set->fill(Input::all()); 

     foreach (Input::get('course') as $course_id => $content) { 
      $item = $set->items->filter(function ($item) use ($course_id) { 
       return ($item->course_id == $course_id); 
      })->first(); 
      $item->content = $content; 
      $set->items()->save($item); 
     } 
     $set->save(); 

正如你所看到的,對於每一個項目,我經歷了所有的輸入(可在其上多少有變化)循環,過濾它,並通過1所以保存的值1每次迭代都會執行查詢。我使用過濾器,因此它不必爲每個檢查執行查詢。

所以我的問題是,有沒有更高效/優雅的方式來做到這一點?像saveMany()可能嗎?

回答

3

您可以使用該方法saveMany這樣的:

 $set->fill(Input::all()); 
     $items = array(); 
     foreach (Input::get('course') as $course_id => $content) { 
      $item = $set->items->filter(function ($item) use ($course_id) { 
       return ($item->course_id == $course_id); 
      })->first(); 
      $item->content = $content; 
      $items[] = $item; 
     } 

     $set->items()->saveMany($items); 
     $set->save(); 

如在相關的模型指出的laravel docs

+0

是的,我看到了,我猜你並不需要一個特定的收藏傳遞給saveMany()的對象。我們可以像你一樣使用簡單的數組。經過測試和驗證,它的工作。謝謝。 – 2015-02-12 06:27:05