我正在尝试在cakephp 3中对一个联盟进行分页。我已经找到并阅读了How do you modify a UNION query in 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']));
}
如How do you modify a UNION query in CakePHP 3?中所述,这会导致order
,limit
和offset
仅应用于第一个选择。
删除paginate()
并通过order
手动应用limit
,offset
和epilog()
,但我必须在代码中重新创建整个分页机制。虽然这是我目前的计划,以防我找不到更好的解决方案,但我认为这不是正确的方法。
有人(@PhantomWatson,@ andm)可以展示一个例子,建议的自定义查找器如何解决这个问题?