Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Utwórz wstawkę... Wybierz instrukcję w Laravel

Nie ma możliwości wykonania tego w jednym zapytaniu (chyba że jesteś na Laravel 5.7), jednak natknąłem się na ten sam problem i chciałem się upewnić, że mogę nadal używać określonego wyboru, który zbudowałem za pomocą QueryBuilder.

Więc co możesz zrobić, aby utrzymać wszystko w połowie tego, co czyste i ponownie wykorzystać funkcjonalność, która wcześniej zbudowała instrukcję select, to:

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

ZAKTUALIZUJ Laravel 5.7

Od Laravela 5.7.17 możesz użyć ->insertUsing(). Zobacz tutaj dla szczegółów. Dziękuję @Soulriser za wskazanie tego.

Zatem powyższe zapytanie wyglądałoby tak:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dostaję wiele select @@session.tx_read_only, czy zrobiłbym to samo?

  2. niezdefiniowana metoda `eq' dla nil:NilClass z rails 3 i ruby ​​enterprise na ubuntu hardy

  3. Jak znaleźć wszystkie relacje między wszystkimi tabelami mysql?

  4. WYBIERZ jedną kolumnę, jeśli druga ma wartość pustą

  5. Nieużywany indeks przestrzenny Mysql