Cakephp 连接查询,在hasMany关联中建立条件
我使用的是CakePHP2.3.6。在一个项目中,我使用hasMany关联中的联接查询来搜索一些数据。我的情况应该是:Cakephp 连接查询,在hasMany关联中建立条件,cakephp,inner-join,has-many-through,Cakephp,Inner Join,Has Many Through,我使用的是CakePHP2.3.6。在一个项目中,我使用hasMany关联中的联接查询来搜索一些数据。我的情况应该是: User.gender='male' AND User.country='USA' AND (Education.level='under_graduate' AND Education.result >= 3.5 AND Education.institute='college 1') AND (Education.level='graduate' AND Educat
User.gender='male' AND User.country='USA'
AND
(Education.level='under_graduate' AND Education.result >= 3.5 AND Education.institute='college 1')
AND
(Education.level='graduate' AND Education.result >= 3 AND Education.institute='college 2')
我尝试的是:
$this->paginate['User']['conditions']['AND']['User.gender']='male';
$this->paginate['User']['conditions']['AND']['User.country']='USA';
$this->paginate['User']['joins'][]=array('table'=>'educations','alias'=>'Education','type'=>'INNER','conditions'=>array('Education.user_id=User.id'));
$this->paginate['User']['conditions']['AND'][0]['AND']['Education.result >= ']=3.5;
$this->paginate['User']['conditions']['AND'][0]['AND']['Education.level']='under_graduate';
$this->paginate['User']['conditions']['AND'][0]['AND']['Education.institute']='college 1';
$this->paginate['User']['conditions']['AND'][1]['AND']['Education.result >= ']=3;
$this->paginate['User']['conditions']['AND'][1]['AND']['Education.level']='graduate';
$this->paginate['User']['conditions']['AND'][1]['AND']['Education.institute']='college 2';
我生成此条件数组:
[User] => Array
(
[conditions] => Array
(
[AND] => Array
(
[User.gender] => male
[User.country] => USA
[0] => Array
(
[AND] => Array
(
[Education.result >= ] => 3.5
[Education.level] => under_graduate
[Education.institute] => college 1
)
)
[1] => Array
(
[AND] => Array
(
[Education.result >= ] => 3
[Education.level] => graduate
[Education.institute] => college 2
)
)
)
)
[joins] => Array
(
[0] => Array
(
[table] => educations
[alias] => Education
[type] => INNER
[conditions] => Array
(
[0] => Education.user_id=User.id
)
)
)
)
但是,当我使用这个条件搜索时,它会返回一个空的结果数组,但我知道数据库中有一些满足这些条件
那么,这里出了什么问题?我该怎么办?请帮帮我
谢谢。您的查询正在使用all和语句,因此可能无法实现。 不会有一行带有
Education.level='under_graduate'
和'Education.level'='graduate'
,因为字段不能同时具有这两个值。
您需要在查询中添加OR,例如:
User.gender='male' AND User.country='USA'
AND
(
(Education.level='under_graduate' AND Education.result >= 3.5 AND Education.institute='college 1')
OR
(Education.level='graduate' AND Education.result >= 3 AND Education.institute='college 2')
)
我刚才增加了一组括号,并将与教育有关的两条条文之间的and改为and。
希望您能够将其转换为CakePHP格式,并且它会起作用 所以我知道您需要找到一个受过两种教育的用户。看,在你的条件和陈述中,你试图找到教育。学院将同时等于“学院1”和“学院2”,这是不可能的。所以,有一种方法可以通过为同一个表添加多个联接来找到它。像这样:
$options['conditions']['User.gender']='male';
$options['conditions']['User.country']='USA';
$options['joins'][]=array(
'table'=>'educations',
'alias'=>'FirstEd',
'type'=>'INNER',
'conditions'=>array('FirstEd.user_id=User.id')
);
$options['joins'][]=array(
'table'=>'educations',
'alias'=>'SecondEd',
'type'=>'INNER',
'conditions'=>array('SecondEd.user_id=User.id')
);
$options['conditions']['AND'][0]['FirstEd.result']=3.5;
$options['conditions']['AND'][0]['FirstEd.level'] = 'under_graduate';
$options['conditions']['AND'][0]['FirstEd.institute']='college 1';
$options['conditions']['AND'][1]['SecondEd.result']=3;
$options['conditions']['AND'][1]['SecondEd.level']='graduate';
$options['conditions']['AND'][1]['SecondEd.institute']='college 2';
$this->Paginator->settings = $options;
$users = $this->Paginator->paginate('User');
这不是最好的解决方案,但对我来说很有效。是的,我也这么认为,这就是为什么我现在这么做的原因。但是,有没有办法做到这一点?事实上,我需要这样做,而不是。你知道吗@Ellaryans听起来你已经找到答案了!您正在努力构建的查询不会返回结果,但我误解了您的最终目标,因为问题中没有说明。无论如何,当您构建查询时,首先直接在DB上检查它们,以确保结果符合您的期望,这会有所帮助!是的,那是真的,我应该先做。谢谢:)@EllaRyanbtw,我在SQL中找到了一个很好的解决方案。非常感谢,它在这里工作:)。你帮了我太多了。顺便问一下,你为什么说这不是最好的解决方案@番茄酱