因此,我需要在房地产数据库中搜索属于房地产经纪人的所有房屋,这些房地产经纪人属于与当前房地产经纪人相同的房地产代理商。我现在正在做这样的事情:
$agency_data = $this->Realtor->find('all',array(
'conditions'=>
array(business_name'=>$realtor_settings['Realtor']['business_name']),
'fields'=>array('num'),
'recursive'=> -1
));
foreach($agency_data as $k=>$v){
foreach($v as $k=>$v1){
$agency_nums[] = $v1['num'];
}
}
$conditions = array(
'realtor_num'=>$agency_nums
);
我似乎有点疯狂,我必须努力工作来分解我的第一个查询的结果,只是为了得到一个简单的,一维的id数组,我可以使用它来构建条件我的后续查询。我是以疯狂的迂回方式做到这一点的吗?是否有一种简单的方法可以编写单个CakePHP查询来传达“select * from realtor_num in home(从realtors中选择num,其中business_name ='n')”?如果是这样,它会更有效率吗?
答案 0 :(得分:0)
确定它很复杂(以你的方式):)
根据您可以执行以下操作的结果:
$agency_data = $this->Realtor->find('list',array(
'conditions'=>array('business_name'=>$realtor_settings['Realtor']['business_name']),
'fields'=>array('num', 'num'),
'recursive'=> -1
));
$agency_data; //this already contain array of id's
方法2 - 构建子查询有两种严格且不那么严格的方法:)第一个你可以看到here(搜索子查询)。
另一个选项是具有以下条件参数:
$this->Realtor->find('all', array('conditions'=>array('field in (select num from realtors where business_name like "'.$some_variable.'"))));
当然要小心子查询中的$ some_variable。你躲避它 - 例如使用Sanitize类。
答案 1 :(得分:0)
$agency_data = $this->Realtor->find('all',array(
'conditions'=>
array('business_name'=>$realtor_settings['Realtor']['business_name']),
'fields'=>array('num'),
'recursive'=> -1
));
$conditions = Set::extract("{n}.Realtor.num", $agency_data);
我会使用像Set :: extract这样的东西来获取你正在寻找的数据列表。这样做的好处是,您可以在其他地方重用相同的数据集并保存查询。您也可以使用以下格式编写set :: extract语句:
$conditions = Set::extract("/Realtor/num", $agency_data);