sql >> Databasteknik >  >> RDS >> Mysql

Skapa en infogning... Välj uttalande i Laravel

Det finns inget sätt att göra detta i en fråga (om du inte använder Laravel 5.7), men jag stötte på samma problem och ville se till att jag kan fortsätta använda ett visst urval som jag bygger med QueryBuilder.

Så vad du kan göra, för att hålla saker och ting rena och återanvända funktionalitet som har byggt ett urvalsuttryck tidigare, är detta:

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

UPPDATERA Laravel 5.7

Från och med Laravel 5.7.17 kan du använda ->insertUsing(). Se här för detaljer. Tack @Soulriser för att du påpekade detta.

Så ovanstående fråga skulle se ut så här:

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


  1. Oracle:flera tabelluppdateringar => ORA-01779:kan inte ändra en kolumn som mappas till en icke-nyckelbevarad tabell

  2. Oracle partitionsindex

  3. Hur många tabeller kan skapas i en mysql-databas?

  4. Installera Azure Data Studio på Ubuntu 18.04