在Cakephp 3中对一个联盟进行分页

时间:2016-03-26 10:55:54

标签: cakephp pagination union cakephp-3.x

我正在尝试在cakephp 3中对一个联盟进行分页。我已经找到并阅读了How do you modify a UNION query in CakePHP 3?,但是对于cakephp来说可能太新了,无法正确理解“使用自定义查找程序”的含义。我已经阅读了cakephp书中的相关部分,但仍然没有看到这有助于将epilog()应用于查询。也许有人可以展示一个完整的例子? 我有两个模型CustomersSuppliers。我正在尝试构建一个搜索函数,它返回两个模型的匹配条目,包括分页和排序。

        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']));
    }

How do you modify a UNION query in CakePHP 3?中所述,这会导致orderlimitoffset仅应用于第一个选择。 删除paginate()并通过order手动应用limitoffsetepilog(),但我必须在代码中重新创建整个分页机制。虽然这是我目前的计划,以防我找不到更好的解决方案,但我认为这不是正确的方法。

有人(@PhantomWatson,@ andm)可以展示一个例子,建议的自定义查找器如何解决这个问题?

0 个答案:

没有答案