CakePHP数据库查询 - 我是不是太复杂了?

时间:2010-09-21 17:01:02

标签: mysql arrays cakephp

因此,我需要在房地产数据库中搜索属于房地产经纪人的所有房屋,这些房地产经纪人属于与当前房地产经纪人相同的房地产代理商。我现在正在做这样的事情:

$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')”?如果是这样,它会更有效率吗?

2 个答案:

答案 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);