2015-06-26 17 views
5

Tôi chỉ đang viết ứng dụng phalcon đầu tiên của mình và có câu hỏi để lọc truy vấn bằng Phalcon \ Mvc \ Model \ Criteria.Kết hợp và và hoặc vận hành trong Phalcon Mvc Model Tiêu chí

Cuối cùng tôi muốn có một truy vấn như thế này

SELECT * 
FROM table 
WHERE 
    status = 'A' AND 
    (
    title LIKE 'combining%' OR 
    title LIKE 'phalcon%' OR 
    (
     title LIKE 'criteria%' AND 
     title LIKE '%phalcon' 
    ) 
) 

Đối với tôi có vẻ như không có cách nào cho ngoặc trong tiêu chí mô hình phalcons. Cách duy nhất để đạt được điều này là bằng cách viết phql.

Thay vì viết một phql hoàn chỉnh tôi có lẽ có thể viết một cái gì đó như thế này, nhưng đó là nhận được cùng phức tạp

<?php 

$query = Table::query(); 
$query->where('status = :status:', array('status' => 'A')); 
$query->andWhere('(
    title LIKE :title1: OR 
    title LIKE :title2: OR (
    title LIKE :title3: AND 
    title LIKE :title4: 
) 
)', array(
    'title1' => 'combining%', 
    'title2' => 'phalcon%', 
    'title3' => 'criteria%', 
    'title4' => '%phalcon' 
)); 
+0

bạn đang sử dụng phiên bản nào? – galki

+0

Tôi đang trên ppa: phalcon/ổn định đáng tin cậy – iRaS

+1

yêu cầu tính năng được mở: https://github.com/phalcon/cphalcon/issues/10562 – iRaS

Trả lời

0

Dường như của Tiêu chuẩn "ở đâu", "andWhere" và "orWhere" phương pháp sẽ thêm dấu ngoặc đơn bên ngoài cho bạn, sau đó bạn có thể viết dấu ngoặc đơn bên trong theo cách thủ công.

$query = Model::query() 
     ->where('status = "A"') 
     ->andWhere('title LIKE "combining%" OR 
      title LIKE "phalcon%" OR 
      (
       title LIKE "criteria%" AND 
       title LIKE "%phalcon" 
      ) 
     '); 
$models = $query->execute(); 

Bạn có thể kiểm tra xem mệnh đề where có đúng không.

var_dump($query->getWhere()); 
+0

vấn đề vẫn còn là rất phức tạp để tạo truy vấn như vậy - hoặc có thể nhiều hơn phức tạp... – iRaS

Các vấn đề liên quan