Я пытаюсь разбить объединение на страницы в cakephp 3. Я уже нашел и прочитал Как изменить запрос UNION в CakePHP 3?, но я, вероятно, слишком новичок в cakephp, чтобы правильно понять, что подразумевается под "использовать пользовательский поиск". Я прочитал соответствующий раздел в книге cakephp, но до сих пор не вижу, как это помогает применить epilog()
к запросу. Может быть, кто-то может показать полный пример? У меня две модели Customers
и Suppliers
. Я пытаюсь создать функцию поиска, которая возвращает совпадающие записи из обеих моделей, включая разбиение на страницы и сортировку.
public function index($q=null) {
$this->loadmodel('Suppliers');
$this->loadmodel('Customers');
$customers=$this->Customers->find('all')->select(['type'=>"'Customers'",'id'=>'id','name'=>'name','phone'=>'phone'])
->where(['name like'=>'%'.$q.'%']);
$suppliers=$this->Suppliers->find('all')->select(['type'=>"'Suppliers'",'id'=>'id','name'=>'name','phone'=>'phone'])
->where(['name like'=>'%'.$q.'%']);
$customers->union($suppliers);
$results=$this->paginate($customers);
$this->set(compact(['q','results']));
}
Как подробно описано в Как изменить запрос UNION в CakePHP. 3?, это приводит к тому, что order
, limit
и offset
применяются только к первому выбору. Удаление paginate()
и применение order
, limit
и offset
вручную через epilog()
работает, но тогда мне пришлось бы воссоздавать весь механизм разбиения на страницы в моем коде. Хотя это мой текущий план на случай, если я не смогу найти лучшее решение, я не верю, что это будет правильный способ сделать это.
Может ли кто-нибудь (@PhantomWatson, @ndm) показать пример, как предлагаемый пользовательский поиск может решить эту проблему?