2013-07-22 30 views
-3

即時特林在發現(「所有」蛋糕上輸入一些條件,這是我的邏輯:多重條件的所有

Traduction.traductions = my username AND Traduction.status = 1 OR 8  
OR, Traduction.check1 = my username AND Traduction.status = 5 OR 2  
OR, Traduction.check2 = my username AND Traduction.status = 6 OR 3  
Or, Trauduction.editions = my username AND Traduction.status = 7 OR 3 

如果這些條件一個是正確的,他顯示的內容

這是我到目前爲止的代碼

$conditions = array(
       'AND' => array(
        array(
         'OR' => array(
          array('Traduction.traductions' => $this->Session->read('Auth.User.username')), 
          array('Traduction.status' => '1'), 
          array('Traduction.status' => '8') 
         ) 
        ), 
       'AND' => array(
        array(
         'OR' => array(
          array('Traduction.check1' => $this->Session->read('Auth.User.username')), 
          array('Traduction.check1' => '5'), 
          array('Traduction.check1' => '2') 
         ) 
        )      
       ), 
       'AND' => array(
        array(
         'OR' => array(
          array('Traduction.check2' => $this->Session->read('Auth.User.username')), 
          array('Traduction.check2' => '6'), 
          array('Traduction.check2' => '3') 
         ) 
        )      
       ), 
       'AND' => array(
        array(
         'OR' => array(
          array('Traduction.edition' => $this->Session->read('Auth.User.username')), 
          array('Traduction.edition' => '7'), 
          array('Traduction.edition' => '4') 
         ) 
        )      
       ), 

      ) 
    ); 
    $traduction = $this->Traduction->find('all', array(
     'conditions' => $conditions 

    )); 

但遺憾的是它似乎不工作。這裏德SQL轉儲

SELECT `Traduction`.`id`, `Traduction`.`serie`, `Traduction`.`issue`,  
`Traduction`.`page`, `Traduction`.`writer`, `Traduction`.`drawer`, 
`Traduction`.`release`, `Traduction`.`traductions`, `Traduction`.`check1`, 
`Traduction`.`check2`, `Traduction`.`edition`, `Traduction`.`user_name`, 
`Traduction`.`content`, `Traduction`.`status` FROM 
`dcomicstrad`.`traductions` AS 
`Traduction` WHERE ((((`Traduction`.`traductions` = 'DrWhat') 
OR (`Traduction`.`status` = 1) 
OR (`Traduction`.`status` = 8))) 
AND (((`Traduction`.`edition` = 'DrWhat') 
OR (`Traduction`.`edition` = '7') 
OR (`Traduction`.`edition` = '4')))) 

是否有人可以幫助我,我有點所有這些陣列丟失X_X

+0

簡單地說*不*工作並不能使我們理解你的問題....請指定你面臨什麼問題,或者你得到什麼錯誤 –

+0

你可以在cakephp中多重條件檢查這個例子http://goo.gl/OvDt4b – Sudhir

回答

4

你起步相當不錯的實際(與OR的情況下),但你在同一個老問題困住自己:不要使用一個數組鍵兩次(它只會覆蓋前一個)!

$conditions = array(
    'AND' => array(), 
    'AND' => array(), 
    'AND' => array(), 

基本上這樣做。

使用此:

$conditions = array(
    array(), 
    array(), 
    array(), 

可以刪除'AND' =>一部分,默認情況下使用蛋糕並連接數組的數組。

如果你想保持與,你需要使它一個槓桿更深:

$conditions = array(
    'AND' => array(
     array(), 
     array(), 
     array(), 

一點題外話:這仍然是我們正在談論的CakePHP。因此至少包含一點點魔力,讓你的生活更輕鬆。你可以在這裏簡化你的查詢。每一個OR語句可以通過短陣代替:

'OR' => array(
    array('Traduction.traductions' => $this->Session->read('Auth.User.username')), 
    array('Traduction.status' => '1'), 
    array('Traduction.status' => '8') 
) 

可以成爲

'OR' => array(
    array('Traduction.traductions' => $this->Session->read('Auth.User.username')), 
    array('Traduction.status' => array('1', '8'), 
) 
+0

感謝@mark它現在工作正常(它是cakephp ^^) – Comicovore

+0

它的有幫助,感謝分享和細節。 –

0
if (!empty($this->data['Report']['ipno'])) 
     { 
      $condition['DrugissueBatchIssue.patient_no like'] = "%".$this->data['Report']['ipno']."%"; 
     } 
     if (!empty($this->data['Report']['pname'])) 
     { 
      $condition['DrugissueBatchIssue.patient_name like'] = "%".$this->data['Report']['pname']."%"; 
     }    
     if (!empty($this->data['Report']['fromDate'])) 
     { 
      $condition['date(DrugissueBatchIssue.created_date) >='] = date('Y-m-d',strtotime($this->data['Report']['fromDate'])); 
     } 
     if (!empty($this->data['Report']['toDate'])) 
     { 
      $condition['date(DrugissueBatchIssue.created_date) <='] = date('Y-m-d',strtotime($this->data['Report']['toDate']));    
     } 
$patient_wise_sales_report = $this->DrugissueBatchIssue->find('all', array('conditions'=>array($condition),'order'=>array('DrugissueBatchIssue.patient_no asc'))); 
+1

歡迎來到Stack Overflow。考慮在代碼中添加解釋。它如何完全回答這個問題? –