разбить объединение на страницы в Cakephp 3

Я пытаюсь разбить объединение на страницы в 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) показать пример, как предлагаемый пользовательский поиск может решить эту проблему?


person fpet    schedule 26.03.2016    source источник
comment
Насколько мне известно, единственный способ заставить это работать — создать свой собственный механизм разбиения на страницы, используя ссылку, которую вы уже предоставили, или одну из ваших собственных.   -  person chrisShick    schedule 28.03.2016
comment
Э-э, да, но... Как я уже сказал в исходном вопросе, я понятия не имею, как решить эту проблему с помощью пользовательского поиска. Вот я и просил пример.   -  person fpet    schedule 30.03.2016