Mysql
 sql >> Base de données >  >> RDS >> Mysql

Créer une instruction Insert... Select dans Laravel

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);