У меня есть 3 модели в CakePHP
идентификатор объекта 1 имя 1 Индия - 2 имя 2 Индия - 3 имени 3 великобритании - 4 название 4 пакистан -
portals_id имя портала 1 Google XML 2 zameen.com 3 купить недвижимость 4 аренда недвижимости
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'));
Я рекомендую вам попробовать CakeDC Search плагин. Вы можете настроить практически любой тип поиска (независимо от его сложности), и он совместим с разбиением на страницы.
первый пример в документах включает пример того, как настроить $filterArgs
выполнить поиск HABTM.
Я предполагаю, что вы объявили отношения 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'));
Не проверял, но это должно работать.