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

Opret et indsæt... Vælg sætning i Laravel

Der er ingen måde at gøre dette på i én forespørgsel (medmindre du er på Laravel 5.7), men jeg stødte på det samme problem og ville sikre mig, at jeg kan fortsætte med at bruge et bestemt udvalg, jeg bygger med QueryBuilder.

Så hvad du kunne gøre, for at holde tingene halvt så rene og genbruge funktionalitet, som har bygget et udvalgt statement før, er dette:

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

OPDATERING Laravel 5.7

Fra Laravel 5.7.17 kan du bruge ->insertUsing(). Se her for detaljer. Tak @Soulriser for at påpege dette.

Så ovenstående forespørgsel ville se sådan ud:

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


  1. Løsning for dynamiske sætninger i lagrede procedurer kaldet fra triggere

  2. MySQL Workbench viser resultater som BLOB

  3. Opsporing af høje CLR_MANUAL_EVENT-venter

  4. Forskel mellem tekst og varchar (karakter varierende)