Nie ma możliwości wykonania tego w jednym zapytaniu (chyba że jesteś na Laravel 5.7), jednak natknąłem się na ten sam problem i chciałem się upewnić, że mogę nadal używać określonego wyboru, który zbudowałem za pomocą QueryBuilder.
Więc co możesz zrobić, aby utrzymać wszystko w połowie tego, co czyste i ponownie wykorzystać funkcjonalność, która wcześniej zbudowała instrukcję select, to:
/**
* Wherever your Select may come from
**/
$select = User::where(...)
->where(...)
->whereIn(...)
->select(array('email','moneyOwing'));
/**
* get the binding parameters
**/
$bindings = $select->getBindings();
/**
* now go down to the "Network Layer"
* and do a hard coded select
*/
$insertQuery = 'INSERT into user_debt_collection (email,dinero) '
. $select->toSql();
\DB::insert($insertQuery, $bindings);
ZAKTUALIZUJ Laravel 5.7
Od Laravela 5.7.17 możesz użyć ->insertUsing(). Zobacz tutaj dla szczegółów. Dziękuję @Soulriser za wskazanie tego.
Zatem powyższe zapytanie wyglądałoby tak:
DB::table('user_debt_collection')->insertUsing(['email','dinero'], $select);