我在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());
并且它有效。分页是否仅适用于对模型的直接查询,或者它也适用于像上面的查询一样的查询,这些查询会加入其他表。感谢。
答案 0 :(得分:1)
(不知道你的cakephp版本,假设是2.x)
你很困惑。你找不到东西,然后分页。 paginator组件对它自己进行整个查询。所以你所做的基本上是因此,不要将简单的查找用于要分页的查询,同样,不要使用Paginator进行简单的查找以查找其他内容(不是说你现在正在做,只是友好的提醒)。
对于手头的问题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,如果这有助于您清除对所需功能和参数的疑虑。