2015-02-12 23 views
5

Ho un'entità impostata che contiene molti elementi. Quindi, quando aggiorni i set, il modulo include il campo per aggiornare anche l'oggetto. L'ho fatto e funziona bene, ma non sono sicuro che sia il modo corretto e più efficiente/elegante per farlo. Qui è il mio codice:Laravel Eloquent - Salva/aggiorna dati di relazione uno-a-molti correlati

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

Come si può vedere, per ciascuna voce, ho in loop attraverso tutti gli input (che può variare da quanti ha), filtrare e salvare il valore 1 di 1. Quindi un la query viene eseguita per ogni iterazione. Uso il filtro in modo che non debba fare una query per ogni controllo.

Quindi la mia domanda è, c'è un modo più efficiente/elegante per fare questo? Qualcosa come saveMany() forse?

risposta

3

È possibile utilizzare il metodo saveMany come questo:

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

Come evidenziato nei modelli correlate di laravel docs

+0

Sì ho visto che, immagino che non hai bisogno di una collezione specifica oggetto da passare a saveMany(). Possiamo semplicemente usare un array semplice come hai fatto tu. Testato e verificato funziona. Grazie. –

Problemi correlati