Как я могу отфильтровать постраничные результаты на основе значения связанных моделей? (CakePHP 2.x)

У меня есть 3 модели в CakePHP

  1. свойства
идентификатор объекта
1 имя 1 Индия -
2 имя 2 Индия -
3 имени 3 великобритании -
4 название 4 пакистан -
  1. порталы
portals_id имя портала
1 Google XML
2 zameen.com
3 купить недвижимость
4 аренда недвижимости
  1. property_portals
property_portals_id portal_id property_id
1 1 1
2 1 1
3 2 2
4 2 2
5 2 3
6 1 4
7 1 1

У меня есть система сетки, которая ищет свойства по различным атрибутам.
Теперь я хочу искать только те свойства, которые будут рекламироваться на конкретном портале.

Я использую нумерацию страниц.

$this->set('properties', $this->Paginator->paginate('Property'));

2

Решение

Я рекомендую вам попробовать CakeDC Search плагин. Вы можете настроить практически любой тип поиска (независимо от его сложности), и он совместим с разбиением на страницы.

первый пример в документах включает пример того, как настроить $filterArgs выполнить поиск HABTM.

0

Другие решения

Я предполагаю, что вы объявили отношения HABTM в своих моделях следующим образом:

class Property extends AppModel {

public $hasAndBelongsToMany = array(
'Portal' => array(
'className' => 'Portal',
'joinTable' => 'property_portals',
'foreignKey' => 'portal_id',
'associationForeignKey' => 'property_id',
'unique' => 'keepExisting',
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
)
);

И наоборот для вашей модели портала

Тогда вы сможете установить параметры запроса для разбивки на страницы следующим образом:

$this->Property->Portal->paginate('Post', array(
'conditions' => array(
'Portal.id' => $idOfPortalYouWantToSearch
), 'order' => array(
'COUNT(property_portals_id )'
)
));

И затем запрос с:

$this->set('properties', $this->Paginator->paginate('Property'));

Не проверял, но это должно работать.

0