Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Crie uma instrução Insert... Select em Laravel


Não há como fazer isso em uma consulta (a menos que você esteja no Laravel 5.7), mas me deparei com o mesmo problema e queria ter certeza de que posso continuar usando um determinado select que construo com o QueryBuilder.

Então, o que você poderia fazer, para manter as coisas metade limpas e reutilizar a funcionalidade que construiu uma instrução select antes, é o seguinte:
/**
 * 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);

ATUALIZAR Laravel 5.7

A partir do Laravel 5.7.17 você pode usar ->insertUsing(). Veja aqui para detalhes. Obrigado @Soulriser por apontar isso.

Portanto, a consulta acima ficaria assim:
DB::table('user_debt_collection')->insertUsing(['email','dinero'], $select);