Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Create a Insert... Select-Anweisung in Laravel

Es gibt keine Möglichkeit, dies in einer Abfrage zu tun (es sei denn, Sie verwenden Laravel 5.7), aber ich bin auf dasselbe Problem gestoßen und wollte sicherstellen, dass ich weiterhin eine bestimmte Auswahl verwenden kann, die ich mit dem QueryBuilder erstellt habe.

Was Sie also tun könnten, um die Dinge halbwegs sauber zu halten und Funktionen wiederzuverwenden, die zuvor eine select-Anweisung erstellt haben, ist Folgendes:

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

Laravel 5.7 AKTUALISIEREN

Ab Laravel 5.7.17 können Sie ->insertUsing() verwenden. Siehe hier für Details. Danke @Soulriser für den Hinweis.

Die obige Abfrage würde also so aussehen:

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