Neexistuje způsob, jak to udělat v jednom dotazu (pokud nepoužíváte Laravel 5.7), ale narazil jsem na stejný problém a chtěl jsem se ujistit, že mohu nadále používat určitý výběr, který sestavuji pomocí QueryBuilder.
Co byste tedy mohli udělat, abyste udrželi věci napůl čisté a znovu použili funkci, která již dříve vytvořila příkaz select, je toto:
/**
* 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);
AKTUALIZOVAT Laravel 5.7
Od Laravelu 5.7.17 můžete použít ->insertUsing(). Viz zde pro detaily. Děkujeme @Soulriser za upozornění.
Výše uvedený dotaz by tedy vypadal takto:
DB::table('user_debt_collection')->insertUsing(['email','dinero'], $select);