2009-03-02 5 views
1

Можно создать дубликат:
How do I query a table based with HABTM relationship while providing additional conditions in CakePHP?Как найти следующие данные

Я, м с помощью двух таблиц (регионы и сафари), имеющие отношения многие ко многим. таблицы объединены другой таблицей с именем regions_safaris (с полями - region_id $ safari-id). Я хочу получить все сафари, отвечающие заданным критериям, например, длительностью 5 дней и в данном регионе. Это должно быть реализовано в cakephp

ответ

1

Это похоже на проблему с базой данных, чем проблема с php. Вот синтаксис (для большинства БД, как например, MySQL), чтобы получить список всех 5 дней сафари, которые отображенные в регион «yourRegion»

table safari: 
id 
name 
duration 

table region: 
id 
name 

table regions_safaris: 
safari_id 
region_id 

select s.name 
from region r, safaris_regions sr, region r, safari s 
where r.name='yourRegion' 
and sr.region_id=r.id and s.id=sr.safari_id and s.duration=5; 
+0

спасибо. это хорошо работает, но как я могу реализовать ту же концепцию в cakephp – juma

1

Если у вас есть ваши модели связаны правильно. Это строки кода, которые я бы использовал в подобной ситуации. При фильтрации по условию habtm я нашел полезным начать с модели, которая имеет самый ограничительный фильтр (или тот, который быстрее сгружает базу данных). В этом случае область.

От контроллера Safaris:

$conditions = array('conditions' => array('Region.id' => 'yourRegion', 'Safari.duration' => 5); 
$this->Safari->Region->recursive = 1; 
$safaris = $this->Safari->Region->find('all', $conditions); 

Затем вы должны быть в состоянии print_r ($ сафари) и доступ к каждому сафари через вложенный массив региона. то есть:

$safaris['Region'][0]['Safari'][0]['name'] 

Это должно предоставить вам первые возвращенные регионы, связанные с первым сафари, которые соответствуют критериям. print_r ($ safaris), чтобы лучше рассмотреть структуру данных, и вы увидите, что я имею в виду.

Смежные вопросы