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

Cách sử dụng 'have' với phân trang trên cột mối quan hệ trong laravel 5

Cập nhật

Nếu bạn sử dụng paginate() với truy vấn của bạn, laravel sẽ cố gắng thực thi mã SQL sau để đếm tổng số kết quả phù hợp có thể có:

select count(*) as aggregate 
from `vehicles` inner join `dealers` 
  on `vehicles`.`dealer_id` = `dealers`.`id`
having distance < 200

Như bạn thấy, không có cột hoặc bí danh nào như vậy distance trong truy vấn này.

Tùy chọn 2 trong câu trả lời ban đầu của tôi cũng sẽ giải quyết vấn đề đó.

Câu trả lời ban đầu

Đó là một vấn đề ở chế độ nghiêm ngặt của MySQL. Nếu bạn sử dụng laravel 5.3 chế độ nghiêm ngặt được bật theo mặc định. Bạn có hai lựa chọn:

Tùy chọn 1:Tắt chế độ nghiêm ngặt cho MySQL trong config/database.php

...
'mysql' => [
    ...
    'strict' => false,
    ...
],
...

Tùy chọn 2:Sử dụng phân vùng WHERE

Vehicle::join('dealers', 'vehicles.dealer_id', '=', 'dealers.id')
     ->select(DB::raw("dealers.id, ( cos( radians(latitude) ) * cos( radians( longitude ) ) ) AS distance"))
     ->whereRaw('cos( radians(latitude) ) * cos( radians( longitude ) ) < 200');

Tài liệu:

Chế độ SQL máy chủ - ONLY_FULL_GROUP_BY



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao công cụ MyISAM của MySQL không hỗ trợ Khoá ngoại?

  2. Số cột lỗi MySQL C # không khớp với số lượng giá trị ở hàng 1

  3. Không thể sử dụng tên cột mô tả trong mysql

  4. MySql lấy danh sách các từ duy nhất từ ​​bảng trong đó các giá trị trong một trường được phân tách bằng dấu phẩy

  5. Xóa tất cả các bản ghi của một bảng không được tham chiếu từ một bảng khác