Il n'y a aucun moyen de le faire en une seule requête (sauf si vous êtes sur Laravel 5.7), mais j'ai rencontré le même problème et je voulais m'assurer que je peux continuer à utiliser une certaine sélection que j'ai construite avec le QueryBuilder.
Donc, ce que vous pourriez faire, pour garder les choses à moitié propres et pour réutiliser les fonctionnalités qui ont déjà construit une instruction select, c'est ceci :
/**
* 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);
MISE À JOUR Laravel 5.7
Depuis Laravel 5.7.17, vous pouvez utiliser ->insertUsing(). Voir ici pour plus de détails. Merci @Soulriser de l'avoir signalé.
Ainsi, la requête ci-dessus ressemblerait à ceci :
DB::table('user_debt_collection')->insertUsing(['email','dinero'], $select);