此代码:
$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
AND UsersProblem
。problem_id
= 38“在哪里?
如何创建正确的查找条件以使用户获得一些问题列表?这与许多关系有很多联系。
使用 $ this->问题 - >查找是不可能的,因为我需要使用2个连接:users_problems和users_practices。并使用它们和条件,如下:
'AND' => array(
'UsersProblem.problem_id' => 38,
'UsersProblem.problem_id' => 34,
'UsersPractices.practice_id' => 1,
'UsersPractices.practice_id' => 2,
),
答案 0 :(得分:4)
你正在覆盖'UsersProblem.problem_id'。试想它就像阵列一样。 CakePHP只是使用PHP数组结构来执行这些查找,这意味着它遵循数组规则。但是要在cakephp中解决这个问题,你应该使用二维数组
像这样:
'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人员在这种情况下内置到系统中的一种解决方法。
答案 1 :(得分:0)
我认为您需要使用OR代替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
);
答案 2 :(得分: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,因为它们未针对上述情况进行优化。
供参考:
MYSQL OR vs IN performance 和 CakePHP right way to do this (get value from setting's table)
答案 3 :(得分: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);