Mysql
 sql >> база данни >  >> RDS >> Mysql

Създайте Insert... Изберете оператор в Laravel

Няма начин да направя това с една заявка (освен ако не сте на Laravel 5.7), но попаднах на същия проблем и исках да се уверя, че мога да продължа да използвам определен избран, който изграждам с QueryBuilder.

И така, това, което бихте могли да направите, за да запазите нещата наполовина чисти и да използвате повторно функционалност, която е изградила преди това оператор select, е следното:

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

От Laravel 5.7.17 можете да използвате ->insertUsing(). Вижте тук за детайли. Благодаря ви @Soulriser, че посочи това.

Така че горната заявка ще изглежда така:

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. PHPmailer - Многократно изпращане на имейл

  2. поръчка по rand() създава проблеми за големи публикации

  3. Как да подобрим производителността на INSERT в много голяма MySQL таблица

  4. как да върна UUID на Java, съхранен в DB като двоичен

  5. json_encode не връща нищо