No hay forma de hacer esto en una consulta (a menos que esté en Laravel 5.7), sin embargo, me encontré con el mismo problema y quería asegurarme de poder seguir usando una determinada selección que construí con QueryBuilder.
Entonces, lo que podría hacer, para mantener las cosas la mitad de limpias y reutilizar la funcionalidad que ha creado una declaración de selección antes, es esto:
/**
* 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);
ACTUALIZAR Laravel 5.7
A partir de Laravel 5.7.17 puedes usar ->insertUsing(). Consulte aquí para detalles. Gracias @Soulriser por señalar esto.
Entonces, la consulta anterior se vería así:
DB::table('user_debt_collection')->insertUsing(['email','dinero'], $select);