2015-02-12 10 views
5

Mam obiekt Set, który zawiera wiele elementów. Tak więc, podczas aktualizacji zestawów, formularz zawiera również pole do aktualizacji tego elementu. Zrobiłem to i działa dobrze, ale nie jestem pewien, czy jest to właściwy i najbardziej efektywny/elegancki sposób na zrobienie tego. Oto mój kod:Laravel Epoquent - Zapisz/Aktualizuj pokrewne One-to-Many Relationship Data

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

Jak widać, dla każdej pozycji, ja zapętlony przez wszystkie wejścia (które mogą się różnić od tego, ile ma), przefiltrować go i zapisz wartość 1 o 1. Tak więc zapytanie jest wykonywane dla każdej iteracji. Używam filtra, aby nie musiał wykonywać kwerendy dla każdego czeku.

Moje pytanie brzmi, czy istnieje bardziej wydajny/elegancki sposób na zrobienie tego? Coś jak saveMany() może?

Odpowiedz

3

Można użyć metody saveMany tak:

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

Jak wskazano w podobnych modeli z laravel docs

+0

Tak widziałem, że myślę, że nie trzeba określonej kolekcji obiekt do przekazania do saveMany(). Możemy po prostu użyć prostej tablicy tak jak ty. Przetestowałem i zweryfikowałem, że działa. Dzięki. –

Powiązane problemy