sql >> Database >  >> RDS >> Mysql

Maak een Insert... Select statement in Laravel

Er is geen manier om dit in één query te doen (tenzij je Laravel 5.7 gebruikt), maar ik kwam hetzelfde probleem tegen en wilde ervoor zorgen dat ik een bepaalde selectie die ik met de QueryBuilder heb gebouwd, kan blijven gebruiken.

Dus wat je zou kunnen doen om de zaken half zo schoon te houden en functionaliteit te hergebruiken die eerder een select statement heeft gemaakt, is dit:

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

UPDATE Laravel 5.7

Vanaf Laravel 5.7.17 kun je ->insertUsing() gebruiken. Zie hier voor details. Bedankt @Soulriser om hierop te wijzen.

Dus bovenstaande vraag zou er als volgt uitzien:

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


  1. Hoe kan ik een MySQL-query versnellen met een grote offset in de LIMIT-clausule?

  2. SELECT COUNT(*) is traag, zelfs met where-clausule

  3. MySQL LOAD DATA INFILE met komma als decimaal scheidingsteken

  4. MySql SELECT-unie voor verschillende kolommen?