2012-02-22 15 views
7

Sử dụng mô hình bộ sưu tập Magentos, làm thế nào tôi nên đi về việc thêm một truy vấn phần/bộ lọc như thế này:Magento thu - lọc theo một số lĩnh vực

WHERE (main_table.x < 1 OR (main_table.x - main_table.y) >= 5) 

Cập nhật bây giờ tôi đang chạy này:

$this->getSelect() 
    ->where('main_table.x < 1') 
    ->orWhere('(main_table.x - main_table.y) >= :qty'); 
$this->addBindParam(':qty', $qty); 

Kết quả:

SELECT ... WHERE ... AND ... AND (main_table.x < 1) OR ((main_table.x - main_table.y) >= :qty) ORDER BY ... 

Vấn đề là tôi dường như không thể có được để ràng buộc $qty để :qty

Cập nhật 2 tôi đã kết thúc với điều này, vì tôi cần sự OR trong ngoặc

$this->getSelect()->where('(main_table.x < 1 OR (main_table.x - main_table.y) >= ?)', $qty); 
+0

Tôi đã cập nhật bài đăng – Vitamin

Trả lời

6

Khi bạn sử dụng getSelect phương pháp bạn đang đi qua giao diện bộ sưu tập mô hình của Magento. Đôi khi đây là cách duy nhất để có được truy vấn chọn chính xác mà bạn muốn, nhưng hãy nhớ rằng nó có thể không phải là 100% với giao diện mô hình Magento đang làm.

Khi bạn sử dụng phương pháp bindParamater bạn đang sử dụng giao diện mô hình Magento. Tôi không thể nói với lý do tại sao nó không hoạt động, nhưng tôi nghi ngờ đối tượng chọn Zend và các đối tượng bộ sưu tập mô hình Magento ràng buộc các tham số của chúng vào các thời điểm khác nhau và theo một cách khác.

Để nhận được kết quả mong muốn, hãy bỏ qua phương thức bindParamater và sử dụng phương pháp thông số thay thế đơn giản hơn của phương pháp orWhere.

$this->getSelect() 
    ->where('main_table.x < 1') 
    ->orWhere('(main_table.x - main_table.y) >= ?',$qty); 
+0

Điều này hoạt động hoàn hảo, cảm ơn! – Vitamin

3

Blockquote Vấn đề là tôi dường như không thể có được để ràng buộc $ qty để: qty

Vâng nó thực sự không phải là một vấn đề đó là cách PDO/MySQL động cơ đang làm việc với chuẩn bị tuyên bố truy vấn và các thông số ràng buộc - được gửi riêng - và thực thi truy vấn sau đó.

Vì vậy, nó không phải trên lớp trừu tượng DB để tạo báo cáo kết quả truy vấn cuối cùng nếu bạn đang sử dụng Bind thông số

Xem stackoverflow question này và PDO manual.

+1

Vì vậy, bạn đang nói nó hoạt động, tôi chỉ in truy vấn trước khi nó được thực hiện, và do đó có được kết quả gây hiểu nhầm? – Vitamin

+0

Có, bạn sẽ không thấy chuỗi truy vấn có ràng buộc nội suy mà tất nhiên có thể gây khó chịu. Để kiểm tra kỹ, hãy giảm truy vấn thu thập của bạn bằng sku hoặc ID sản phẩm với thông số ràng buộc. – ngocanhdoan