Tôi đang cố gắng sử dụng mệnh đề "HAVING" trong truy vấn SQL bằng cách sử dụng phương thức pagPH (paginate() của CakePHP.CakePHP: Làm thế nào tôi có thể sử dụng thao tác "HAVING" khi tạo truy vấn bằng phương thức tìm kiếm?
Sau khi tìm kiếm xung quanh, có vẻ như không thể thực hiện được điều này thông qua các phương thức pagination()/find() của Bánh.
Mã Tôi có trông giống như sau:
$this->paginate = array(
'fields' => $fields,
'conditions' => $conditions,
'recursive' => 1,
'limit' => 10,
'order' => $order,
'group' => 'Venue.id');
Một trong những lĩnh vực $ là một bí danh "khoảng cách". Tôi muốn thêm truy vấn khi khoảng cách < 25 (ví dụ: HAVING khoảng cách < 25).
Tôi đã thấy hai giải pháp thay thế cho đến nay, rất tiếc là không phù hợp với nhu cầu của tôi. Hai tôi đã thấy là:
1) Thêm mệnh đề HAVING vào tùy chọn "nhóm". ví dụ. 'group' => 'Venue.id HAVING distance < 25'
. Điều này dường như không hoạt động khi được sử dụng kết hợp với phân trang vì nó làm rối loạn truy vấn đếm ban đầu được thực hiện. (Tức là cố gắng SELECT distinct(Venue.id HAVING distance < 25)
mà rõ ràng là cú pháp hợp lệ.
2) Thêm mệnh đề HAVING sau khi điều kiện WHERE (ví dụ WHERE 1 = 1 HAVING field > 25
) này không làm việc vì nó dường như mệnh đề HAVING phải đến sau tuyên bố nhóm mà Cake đang đặt sau điều kiện WHERE trong truy vấn mà nó tạo ra.
Có ai biết cách thực hiện điều này bằng phương thức find() của CakePHP không? Tôi không muốn sử dụng truy vấn() vì điều đó sẽ liên quan đến rất nhiều rework và cũng có nghĩa là tôi cần phải thực hiện logic phân trang của riêng tôi!
Cảm ơn trước
thế nào về 'điều kiện => array (' Venue.distance <=' => 25) '? –
@Chúng tôi đã đề cập đến cách giải quyết này trong câu hỏi ... nó không hoạt động đối với tôi .. – cowls
@Piotr, khoảng cách là bí danh nên không thể sử dụng trong mệnh đề WHERE – cowls