Non c'è modo di farlo in una query (a meno che tu non sia su Laravel 5.7), tuttavia mi sono imbattuto nello stesso problema e volevo assicurarmi di poter continuare a utilizzare una determinata selezione che costruisco con QueryBuilder.
Quindi quello che potresti fare, per mantenere le cose pulite per metà e riutilizzare le funzionalità che hanno creato un'istruzione select in precedenza, è questo:
/**
* 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);
AGGIORNAMENTO Laravel 5.7
A partire da Laravel 5.7.17 puoi usare ->insertUsing(). Vedi qui per dettagli. Grazie @Soulriser per averlo segnalato.
Quindi la query sopra sarebbe simile a questa:
DB::table('user_debt_collection')->insertUsing(['email','dinero'], $select);