2014-01-20 37 views
0

此代碼:CakePHP的許多條件,一個場

$conditions = array( 
    'fields' => array(
     'User.id' 
     ),  
    'conditions' => array(
     'AND' => array(
      'UsersProblem.problem_id' => 38, 
      'UsersProblem.problem_id' => 34, 
      ), 
     ), 
    'recursive' => -1 
    ); 

$conditions['joins'][] = array(
    'table' => 'users_problems', 
    'alias' => 'UsersProblem', 
    'type' => 'INNER', 
    'conditions' => array(
     'User.id = UsersProblem.user_id', 
    )); 

正在改變這個SQL查詢:

SELECT `User`.`id` 
FROM `lawyers`.`users` 
    AS `User` 
INNER JOIN `lawyers`.`users_problems` 
    AS `UsersProblem` 
    ON (`User`.`id` = `UsersProblem`.`user_id`) 
WHERE `UsersProblem`.`problem_id` = 34 

哪裏是和UsersProblemproblem_id = 38" ? 如何建立正確的查找條件得到用戶的問題的一些名單?哪些鏈接爲多對多的關係。

使用$這個 - > Problem->找到是不可能的,beause我需要使用2聯接:users_problems和users_practices和使用他們的條件,這樣的:

'AND' => array(
    'UsersProblem.problem_id' => 38, 
    'UsersProblem.problem_id' => 34, 
    'UsersPractices.practice_id' => 1, 
    'UsersPractices.practice_id' => 2, 
), 

回答

3

你覆蓋「UsersProblem.problem_id」試想一下像數組是CakePHP是。只是使用PHP數組結構來做這些查找,這意味着它遵循數組規則,但爲了在cakephp中解決這個問題,你應該使用一個二維簡稱AE,下同陣列

像這樣:

'AND' => array(
     array('UsersProblem.problem_id' => 38), 
     array('UsersProblem.problem_id' => 34) 
), 

取而代之的是:

'AND' => array(
     'UsersProblem.problem_id' => 38, 
     'UsersProblem.problem_id' => 34 
), 

通過這種方式,而不是試圖設置鍵 'UsersProblem.problem_id' 兩次,你讓一個數組看起來像

0 -> array('UsersProblem.problem_id' => 38) 
1 -> array('UsersProblem.problem_id' => 34) 

而且這將工作,這是一個解決方案CakePHP傢伙內置到系統中fo這種情況。

0

我認爲你需要的使用或代替AND:

$conditions = array( 
'fields' => array(
    'User.id' 
    ),  
'conditions' => array(
    'OR' => array(
     array('UsersProblem.problem_id' => 38), 
     array('UsersProblem.problem_id' => 34), 
     ), 
    ), 
'recursive' => -1 
); 

您也可以推出這種組成如下:

$conditions = array( 
    'fields' => array(
     'User.id' 
     ),  
    'conditions' => array(
     'OR' => array(
      'UsersProblem.problem_id' => array(34, 38) 
     ), 
    'recursive' => -1 
); 
0

更改您的條件陣列,如下圖所示:

$options = array( 
     'fields' => array('User.id'),  
     'conditions' => array('UsersProblem.problem_id' => array(38,34)), 
     'recursive' => -1 
     ); 
$options['joins'] = array(
       array(
        'table' => 'users_practices', 
        'alias' => 'UsersPractices', 
        'type' => 'INNER', 
        'conditions' => array(
           /CONDITION OF JOIN/ 
        ), 
       array(
        'table' => 'users_problems', 
        'alias' => 'UsersProblem', 
        'type' => 'INNER', 
        'conditions' => array(
           'User.id = UsersProblem.user_id', 
        ) 
       ); 

來自用戶型號:

$this->find('list',$options); 

請勿使用AND/OR,因爲它們未針對上述情況進行優化。

參考:

​​ 和 CakePHP right way to do this (get value from setting's table)

0
**Try the code for join tables in cakephp.......** 

$options = array('joins' => array(
         array(
          'table' => 'modelname1', 
          'alias' => 'modelName1', 
          'type' => 'LEFT', 
          'foreignKey' => false, 
          'conditions' => array('modelname1.id = modelname2.mid') 
         ) 
        ), 
        'fields' => array('modelName1.field1', 'modelName1.field2', 'modelName2.field1', 'modelName2.field2'), 
        'conditions' => array('modelname.id' => 1, 'modelname2.field1' => ''), 
        'limit' => 10, 'page' => 1); 
       $this->modelName2->find($options);