2011-12-13 30 views
12

Originaly posted trên cakephp Q & A nhưng tôi sẽ đặt nó lên đây với hy vọng nhận được một số câu trả lời.cakephp HOẶC điều kiện

Tôi có một nhóm các công ty có trạng thái 0 là mặc định nhưng đôi khi có trạng thái cao hơn. Bây giờ tôi muốn sử dụng trạng thái cao nếu tồn tại nhưng hoàn nguyên về 0 nếu không. tôi đã thử một loạt các cách tiếp cận khác nhau nhưng tôi luôn nhận được hoặc chỉ những người có trạng thái 0 hoặc những người có trạng thái tôi muốn, không bao giờ cho tôi trạng thái nếu tồn tại và 0 nếu không.

Cung cấp cho tôi chỉ là tình trạng tôi chỉ định, không đem lại cho tôi là những người có tình trạng 0:

'Company' => array (
    'conditions' => array (
     'OR' => array(
      'Company.status' => 0, 
      'Company.status' => $status, 
     ) 

    ) 
) 

Cho tôi chỉ trạng thái 0:

'Company' => array (
    'conditions' => array (
     'OR' => array(
      'Company.status' => $status, 
      'Company.status' => 0 
     ) 
    ) 
) 

định nghĩa Thực trạng và dữ liệu lấy trong mã:

function getCountry($id = null, $status = null) { 
    // Bunch of code for retrieving country with $id and all it's companies etc, all with status 0. 
    $status_less_companies = $this->Country->find... 

    if ($status) { 
     $status_companies = $this->Country->find('first', array(
      'conditions' => array(
       'Country.id' => $id 
      ), 
      'contain' => array(
       'Product' => array (
        'Company' => array (
         'conditions' => array (
          'OR' => array(
           'Company.status' => $status, 
           'Company.status' => 0 
          ) 
         ) 
        ) 
       ) 
      ) 
     ) 
    } 

    // Mergin $status_less_companies and $status_companies and returning data to flex application. 
} 

Tôi đã đổi tên cho các mô hình cho câu hỏi này chỉ để có ý nghĩa hơn, peopl e là generaly sợ hãi đi khi tôi nói với họ tôi làm việc với cakephp cho ứng dụng flex của tôi. Tôi đoán logic cho câu hỏi này không có ý nghĩa nhưng tôi tin tưởng rằng nó có ý nghĩa trong ứng dụng của tôi.

Cảm ơn!

+0

Bạn có thể đính kèm Tập tin SQL không? (Sử dụng $ this-> Element ('sql_dump'), trong khung nhìn của bạn, đảm bảo Configure :: debug> 0). – Oldskool

+0

Điều này sẽ không hoạt động kể từ khi tôi đang gọi chức năng trong bánh từ trong ứng dụng flex của tôi. Các truy vấn sẽ không hiển thị trên quan điểm của tôi. – eldamar

Trả lời

24

Tôi không chắc đã hiểu những gì bạn mong đợi kết quả . Nếu bạn muốn truy xuất tất cả các bản ghi có trạng thái = 0, cộng với giả sử trạng thái có trạng thái = 3, bạn có thể sử dụng 'IN' thay vì 'OR'.

Trong Cake, bạn sẽ viết nó như thế này:

$status = 3; 
$conditions = array('Company.status' => array(0, $status)); 
+0

Câu trả lời này đánh bại Vigronds. Mặc dù cả hai phương thức đều hoạt động, sử dụng IN hiệu quả hơn nhiều khi sử dụng OR và do đó toàn bộ ứng dụng trở nên nhanh hơn. – pudelhund

+0

Trong ví dụ OPs này có thể là tốt hơn, nhưng trong trường hợp của một 'OR' kéo dài nhiều hơn một lĩnh vực, câu trả lời @ Vigrond làm việc cho cả hai trường hợp. – dKen

46

Hãy thử

'Company' => array (
    'conditions' => array (
     'OR' => array(
      array('Company.status' => 0), 
      array('Company.status' => $status), 
     ) 

    ) 
) 

Trong sách dạy nấu ăn nó nói để quấn hoặc điều kiện trong mảng nếu họ liên quan đến cùng một lĩnh vực http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#complex-find-conditions

+0

Điều đó mang lại cho tôi kết quả tương tự như ví dụ thứ hai của tôi, chỉ hiển thị mọi công ty có trạng thái = 0 và không sử dụng trạng thái được xác định nếu chúng tồn tại. – eldamar

+0

Bạn có thể cho chúng tôi biết trạng thái $ được khai báo và ví dụ về giá trị nào trong cơ sở dữ liệu không? – Vigrond

+0

Đã cập nhật câu hỏi của tôi với một số thông tin bổ sung, điều này có giúp ích không? – eldamar

0

Bạn cũng có thể lấy kỷ lục bằng cách sử dụng phương pháp sau đây: giá trị đặt trong một mảng ví dụ $ arr = mảng (1,2);

$res = $this->Model->find('all', array(      
     'conditions' =>array('Model.filedname'=>$arr), 
     'model.id' => 'desc' 
)); 

Tôi hy vọng bạn sẽ tìm thấy câu trả lời.

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