Cakephp中的自定义查询分页

时间:2018-07-13 11:01:19

标签: php sql cakephp

我在具有多个联接的控制器中有如下查询

$deals = $this->Deals->find('all', array(
    'fields' => array(
        'Deals.id',
        'Deals.deed_amount',
        'Deals.other_amount',
        'Deals.cash_amount',
        'Deals.total_amount',
        'Deals.client_id',
        'Deals.project_id',
        'Deals.property_id',
        'Deals.properties_flat_id',
        'Deals.date',
        'Deals.status',
        'Deals.invoice_no',
        'Deals.remain_cash_amount',
        'Deals.remain_deed_amount',
        'Deals.remain_other_amount',
        'Deals.remain_deed_amount',
        'Property.name',
        'Client.name',
        'PropertyFlat.name',
        'PropertyFlat.status'


    ),
    'joins' => array(
        array(
            'table' => 'properties',
            'alias' => 'Property',
            'type'  => 'LEFT',
            'conditions' => array(
                'Deals.property_id = Property.id'
            )
        ),
        array(
            'table' => 'clients',
            'alias' => 'Client',
            'type'  => 'LEFT',
            'conditions' => array(
                'Deals.client_id = Client.id'
            )
        ),
        array(
            'table' => 'properties_flats',
            'alias' => 'PropertyFlat',
            'type'  => 'LEFT',
            'conditions' => array(
                'Deals.properties_flat_id = PropertyFlat.id'
            )
        )

    ),

   // 'conditions'=>$condition


));

我想在视图中添加分页。我尝试关注

$this->set('deals', $this->Paginator->paginate($deals));

但是没有用。请帮助我为自定义查询添加分页。我搜索了很多链接,但没有得到任何帮助。

2 个答案:

答案 0 :(得分:1)

您可以尝试这样:

       $paginate = [
                        'joins' =>  array(
                array(
                    'table' => 'properties',
                    'alias' => 'Property',
                    'type'  => 'LEFT',
                    'conditions' => array(
                        'Deals.property_id = Property.id'
                    )
                ),
                array(
                    'table' => 'clients',
                    'alias' => 'Client',
                    'type'  => 'LEFT',
                    'conditions' => array(
                        'Deals.client_id = Client.id'
                    )
                ),
                array(
                    'table' => 'properties_flats',
                    'alias' => 'PropertyFlat',
                    'type'  => 'LEFT',
                    'conditions' => array(
                        'Deals.properties_flat_id = PropertyFlat.id'
                    )
                )

            ),
    'fields' => array(
            'Deals.id',
            'Deals.deed_amount',
            'Deals.other_amount',
            'Deals.cash_amount',
            'Deals.total_amount',
            'Deals.client_id',
            'Deals.project_id',
            'Deals.property_id',
            'Deals.properties_flat_id',
            'Deals.date',
            'Deals.status',
            'Deals.invoice_no',
            'Deals.remain_cash_amount',
            'Deals.remain_deed_amount',
            'Deals.remain_other_amount',
            'Deals.remain_deed_amount',
            'Property.name',
            'Client.name',
            'PropertyFlat.name',
            'PropertyFlat.status'


        )
   ];
 $this->set('deals', $this->Paginator->paginate($this->Deals->find('all'), $paginate)->toArray());

答案 1 :(得分:0)

首先,我建议您重新考虑构造查询的方式。您为什么不只使用contain()方法来检索关联的数据?

第二,您可以将自定义查找器与分页器一起使用。只需在Table类中创建一个,然后从中返回构造的查询,并要求分页器使用它。在这里阅读更多。 https://book.cakephp.org/3.0/en/controllers/components/pagination.html