Я нашел решение, которое очень очень удовлетворительно.
Я просмотрел сложный код функциональности разбивки на страницы и обнаружил, логически, что разбивка на страницы задает условия и передает их функции поиска модели (если модель не имеет своей собственной функции paginate).
Сначала я попытался переопределить функцию paginate, но это было слишком сложно.Решение, которое я нашел в конце, состоит в том, чтобы передать объединения в параметры пагинации так же, как вы передавали бы их при выполнении «поиска» на модели:
//Set the pagination options:
`$this->paginate = array(
'limit' => 25,
'order' => array(
'Customer.lastname1' => 'asc'
),
'joins' =>
array(
// OUTER JOIN because I wanted to also
// fetch record that do not have a 'contact'
array(
'table' => 'contacts',
'alias' => 'Contact',
'type' => 'LEFT OUTER',
'conditions' => array(
'Customer.id = Contact.customer_id',
'Contact.class' => 'ContactAddress'
)
),
array(
'table' => 'contact_addresses',
'alias' => 'ContactAddress',
'type' => 'LEFT OUTER',
'conditions' => array(
'Contact.index = ContactAddress.id',
)
),
),
// In your conditions you can now use any table that
// was joined as well as the original 'customer' table.
'conditions' => $conditions,
);
$this->set('customers',$this->paginate('Customer'));
В любом случае, надеюсь, это кому-нибудь поможет!