Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tạo một Chèn ... Chọn câu lệnh trong Laravel

Không có cách nào để thực hiện điều này trong một truy vấn (trừ khi bạn đang sử dụng Laravel 5.7), tuy nhiên, tôi đã gặp phải vấn đề tương tự và muốn đảm bảo rằng tôi có thể tiếp tục sử dụng một lựa chọn nhất định mà tôi xây dựng bằng QueryBuilder.

Vì vậy, những gì bạn có thể làm, để giữ cho mọi thứ sạch sẽ một nửa và sử dụng lại chức năng đã tạo một câu lệnh select trước đây, là:

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

CẬP NHẬT Laravel 5.7

Kể từ Laravel 5.7.17, bạn có thể sử dụng -> insertUsing (). Xem tại đây để biết chi tiết. Cảm ơn bạn @Soulriser đã chỉ ra điều này.

Vì vậy, truy vấn trên sẽ giống như sau:

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. Hibernate - ClassNotFoundException:com.mysql.jdbc.Driver

  2. Truy vấn MySql:Chọn 3 hàng trên cùng từ bảng cho mỗi danh mục

  3. MySQL trigger:Cập nhật khi đạt đến một ngày giờ nhất định

  4. Cách tối ưu hóa hơn nữa bảng MySQL này cho một Truy vấn duy nhất

  5. Django:Bảng không tồn tại