2015-04-18 14 views
59

Mam następujące zapytanie:Jak wstawić wiele wierszy z jednej kwerendy przy użyciu wymowny/biegle

$query = UserSubject::where('user_id', Auth::id())->select('subject_id')->get(); 

i zgodnie z oczekiwaniami, pojawia się następujący wynik:

[{"user_id":8,"subject_id":9},{"user_id":8,"subject_id":2}] 

Czy istnieje sposób kopiowanie powyższego wyniku do kolejnej tabeli, aby mój stół wyglądał tak?

ID|user_id|subject_id 
1 |8  |9 
2 |8  |2 

Mam problem jest to, że można oczekiwać $query dowolną liczbę wierszy i tak jestem pewien, w jaki sposób wykonać iterację nieznanej liczbie wierszy.

Odpowiedz

128

To naprawdę łatwe do zrobienia w Laravel luźne wstawianie przy użyciu Eloquent lub konstruktora zapytań.

Możesz użyć następującego podejścia.

$data = array(
    array('user_id'=>'Coder 1', 'subject_id'=> 4096), 
    array('user_id'=>'Coder 2', 'subject_id'=> 2048), 
    //... 
); 

Model::insert($data); // Eloquent approach 
DB::table('table')->insert($data); // Query Builder approach 

W twoim przypadku masz już dane w ramach zmiennej $query.

+0

Próbowałem to, ale niestety to uznając mój wynik jako przedmiot, a nie tablicą – Billy

+4

pomocą -> toArray (metoda) na zbiorze obiektów. –

+16

Nie wstawia znaczników czasu. –

3

za pomocą wymownych

$data = array(
    array('user_id'=>'Coder 1', 'subject_id'=> 4096), 
    array('user_id'=>'Coder 2', 'subject_id'=> 2048), 
    //... 
); 

Model::insert($data);