Mysql
 sql >> Database >  >> RDS >> Mysql

Crea un'istruzione Inserisci... Seleziona in Laravel

Non c'è modo di farlo in una query (a meno che tu non sia su Laravel 5.7), tuttavia mi sono imbattuto nello stesso problema e volevo assicurarmi di poter continuare a utilizzare una determinata selezione che costruisco con QueryBuilder.

Quindi quello che potresti fare, per mantenere le cose pulite per metà e riutilizzare le funzionalità che hanno creato un'istruzione select in precedenza, è questo:

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

AGGIORNAMENTO Laravel 5.7

A partire da Laravel 5.7.17 puoi usare ->insertUsing(). Vedi qui per dettagli. Grazie @Soulriser per averlo segnalato.

Quindi la query sopra sarebbe simile a questa:

DB::table('user_debt_collection')->insertUsing(['email','dinero'], $select);