【问题标题】:CakePHP pagination not working for a customized queryCakePHP 分页不适用于自定义查询
【发布时间】:2014-09-25 23:45:08
【问题描述】:

我在CakePHP 中有一个查询,它以某种方式连接其他表以获得我想要的结果。

$options = array();
    $options['fields'] = array('Order.*', 'OrderCustomer.*', 'Payment.*','OrderCoupon.*', 'OrderSalesrep.*', 'OrderPackage.*');
    $options['order'] = "Order.added DESC";

    $options['joins'] = array(
                            array(
                                'table'=>'ordercustomers',
                                'alias'=>'OrderCustomer',
                                'type'=>'inner',
                                'conditions'=>array('OrderCustomer.order_id=Order.id')
                            ),
                            array(
                                'table'=>'payments',
                                'alias'=>'Payment',
                                'type'=>'inner',
                                'conditions'=>array('Payment.id=Order.payment_id')
                            ),
                            array(
                                'table'=>'ordercoupons',
                                'alias'=>'OrderCoupon',
                                'type'=>'left',
                                'conditions'=>array('OrderCoupon.order_id=Order.id')
                            ),
                            array(
                                'table'=>'ordersalesreps',
                                'alias'=>'OrderSalesrep',
                                'type'=>'left',
                                'conditions'=>array('OrderSalesrep.order_id=Order.id')
                            ),
                            array(
                                'table'=>'orderpackages',
                                'alias'=>'OrderPackage',
                                'type'=>'left',
                                'conditions'=>array('OrderPackage.order_id=Order.id')
                            )
    );

$orders = $this->Order->find('all', $options);
    $pageSettings = array();
    $pageSettings['limit'] = 20;
    $pageSettings['order'] = array('Order.added'=>'desc');
    $this->Paginator->settings = $pageSettings;
    $this->set('orders', $this->Paginator->paginate());

然后我想在我的视图中对其进行分页。不知何故,它不起作用。但是我确实尝试过只使用这些行 $orders = $this->Order->find('all', $options);$this->set('orders', $this->Paginator->paginate()); 并且它有效。分页是否仅适用于对模型的直接查询,或者它是否也适用于像我上面的查询这样连接其他表的查询。谢谢。

【问题讨论】:

    标签: cakephp pagination


    【解决方案1】:

    (不知道你的 cakephp 版本,假设是 2.x)

    你很困惑。您没有找到某些内容,然后对其进行分页。分页器组件自己进行整个查询。所以你所做的基本上是

    1. 在这里,cakephp,找到我这个复杂的查询
    2. 知道了,非常感谢,现在给我分页这个完全不相关的查询
    3. 嘿,等等,这没用

    因此,不要对旨在分页的查询使用简单的查找,同样,不要将分页器用于用于其他目的的简单查找查询(不是说你现在正在这样做,只是一个友好的提醒)。

    对于手头的问题cakephp docs 有例子。以这个为例

    $this->Paginator->settings = array(
        'conditions' => array('Recipe.title LIKE' => 'a%'),
        'limit' => 10
    );
    $data = $this->Paginator->paginate('Recipe');
    $this->set(compact('data'));
    

    因此,将其更改为您的问题就像

    //the same options array
    //$pageSettings = array();
    $options['limit'] = 20; //this is by default, I think, so you can omit it
    $options['order'] = array('Order.added'=>'desc');
    $this->Paginator->settings = $options;
    $this->set('orders', $this->Paginator->paginate());
    

    你就完成了。如果有错误,您可以逐个处理(如果您在网上没有找到解决方案,也可以在这里询问)。

    这里是Paginator API,如果这可以帮助您消除对所需功能和参数的疑虑。

    【讨论】:

      猜你喜欢
      • 2010-12-23
      • 1970-01-01
      • 2015-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多