sql >> Base de Datos >  >> RDS >> Mysql

Crear una instrucción Insertar... Seleccionar en Laravel

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