2014-01-20 36 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);