Поэтому у меня есть таблица User и таблица History с User hasMany Histories, и я пытаюсь реализовать разбиение на страницы в таблице пользователя.
Моя проблема в том, что у меня есть поиск, и некоторые вещи, которые можно искать, – это вещи в таблице «История». Есть ли способ фильтровать результаты разбивки на страницы на основе данных в таблице, связанной с hasMany? Контейнер, который поначалу казался решением, допускает такую фильтрацию, но только в поиске связанных данных, а не самих записей (если я что-то не хватает?)
Кто-нибудь должен был решить это раньше?
Поскольку это отношения hasMany, это означает, что Cake должен будет сделать 2 отдельных запроса: 1 в таблице пользователей и один в таблице историй, чтобы получить все ассоциации. Поскольку данные Истории не извлекаются до второго запроса, ваш 1-й запрос не может быть отфильтрован через условия WHERE для полей, найденных в модели History.
Чтобы решить эту проблему, вы можете сделать одно из двух:
Выполните разбиение на страницы по истории с помощью Containable (поскольку History принадлежит пользователю, что означает только 1 запрос будет выполнен).
Выполняйте разбивку на страницы на пользователе так, как вы уже делаете, за исключением того, что вы используете ad-hoc для участия в истории, так что она больше не имеет отношения hasMany.
например:
$this->User->bindModel(array('hasOne' => array('History'))); $this->paginate['User']['contain'][] = 'History'; $this->paginate('User', array('History.some_field' => 'some_value'));