Запрос к базе данных CakePHP - я слишком усложняю вещи?

0

Итак, мне нужно найти базу данных недвижимости для всех домов, принадлежащих риэлторам, которые являются частью того же агентства недвижимости, что и нынешний риэлтор. В настоящее время я делаю это примерно так:

$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
);

Мне кажется немного сумасшедшим, что мне приходится так много работать, чтобы сломать результаты моего первого запроса, просто чтобы получить простой одномерный массив идентификаторов, который я могу использовать для построения условия для мой последующий запрос. Я делаю это безумно кругом? Есть ли простой способ написать один запрос CakePHP для связи "select * from homes where realtor_num in (выбрать num из риэлторов, где business_name = 'n')"? Если да, то было бы более эффективным?

Теги:
arrays
cakephp

2 ответа

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 - построение подзапроса есть 2 пути строгий и не очень строгий:) Первый из них можно увидеть здесь (поиск для Подзапросы).

Другим вариантом является наличие следующих параметров условий:

$this->Realtor->find('all', array('conditions'=>array('field in (select num from realtors where business_name like "'.$some_variable.'"))));

Конечно, будьте осторожны с $some_variable в подзапросе. Вы избавились от него - например, используйте класс Sanitize.

  • 0
    Спасибо! У меня есть много хороших идей для исследования, и я сразу же к этому подойду: D Проклятие быть неопытным программистом (никто не проверяет мой код) - часто я создаю что-то, что работает, но потом понятия не имею, действительно ли я это сделал это правильный путь или нет ...
  • 0
    Да, найти ('список') было именно то, что я ищу, не так ли? Жаль, что я никогда не читал внимательно эту часть руководства, прежде чем пытаться сделать что-то сложное ...
Показать ещё 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);
  • 0
    Ох, это выглядит как полезная функция. Я собираюсь немного поиграть с этим ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню