递归条件下的Cakephp分页 [英] Cakephp pagination on recursive conditions
问题描述
我会对这个问题发疯,请别人帮助我:)
我有这个型号:
Order hasMany - > Orderitem hasOne - > Product
产品有字段vendor_id。
以分页具有特定vendor_id的产品的订单。
我如何实现这个?
我的代码orders_controller:
if(!empty($ this-> data ['Order'] ['vendor_id'])) {
$ conditions ['Product.vendor_id'] = $ this-> data ['Order'] ['vendor_id'];
}
if(!empty($ this-> data ['Order'] ['startdate'])){
$ conditions ['Order.date> ='] = $ this-> data ['Order'] ['startdate'];
}
if(!empty($ this-> data ['Order'] ['enddate'])){
$ conditions ['Order.date< ='] = $ this-> data ['Order'] ['enddate'];
}
$ this-> paginate = array('conditions'=> $ conditions,'order'=>'Order.id ASC');
它会在where clause错误中提供未知列'Product.vendor_id'。
我尝试过几个与Containable但没有成功的事情:(
也许如果设置递归属性如果设置了vendor_id,则设置为2:
if(!empty($ this-> data ['Order'] [ 'vendor_id'])){
pre>
$ this-> paginate ['recursive'] = 2;
$ conditions ['Product.vendor_id'] = $ this-> data ['Order'] ['vendor_id'];
}
if(!empty($ this-> data ['Order'] ['startdate'])){
$ conditions ['Order.date > ='] = $ this-> data ['Order'] ['startdate'];
}
if(!empty($ this-> data ['Order'] [' enddate'])){
$ conditions ['Order.date< ='] = $ this-> data ['Order'] ['enddate'];
}
this-> paginate ['conditions'] = $ conditions;
$ this-> paginate ['order'] ='Order.id ASC';
或者,如果你想,你可以设置递归到-1并手动构建联接..像:
$ this-> paginate = array('fields'=>'Order。*',
'conditions'=> $ conditions,
'joins'=> array(array('table'=> 'orderitems',
'alias'=> 'Orderitem',
'type'=> 'INNER',
'conditions'=> array('Order.id = Orderitem.order_id')),
array('table'=>'products',
'alias'=>'Products',
'type '=>'INNER',
'conditions'=> array('Product.id = Orderitem.product_id',
'Product.vendor_id'=> $ this-& Order'] ['vendor_id'])));
希望这有助于,祝你好运
I am going mad on this issue please somebody help me :)
I have this models:
Order hasMany--> Orderitem hasOne--> Product
Product has field vendor_id.
I would like to paginate orders wich have products with a particular vendor_id.
How I could achieve this?
My code in the orders_controller:
if(!empty($this->data['Order']['vendor_id'])) { $conditions['Product.vendor_id']=$this->data['Order']['vendor_id']; } if(!empty($this->data['Order']['startdate'])) { $conditions['Order.date >=']=$this->data['Order']['startdate']; } if(!empty($this->data['Order']['enddate'])) { $conditions['Order.date <=']=$this->data['Order']['enddate']; } $this->paginate=array('conditions'=>$conditions,'order'=>'Order.id ASC');
It gives Unknown column 'Product.vendor_id' in 'where clause' error. I've tried several things with Containable but without a success :(
解决方案maybe if you set the recursive attribute to 2 only if the vendor_id is set:
if(!empty($this->data['Order']['vendor_id'])) { $this->paginate['recursive'] = 2; $conditions['Product.vendor_id']=$this->data['Order']['vendor_id']; } if(!empty($this->data['Order']['startdate'])) { $conditions['Order.date >=']=$this->data['Order']['startdate']; } if(!empty($this->data['Order']['enddate'])) { $conditions['Order.date <=']=$this->data['Order']['enddate']; } $this->paginate['conditions'] = $conditions; $this->paginate['order'] = 'Order.id ASC';
Or if you want to, you could set the recursive to -1 and build the joins manually .. something like:
$this->paginate = array('fields'=>'Order.*', 'conditions'=>$conditions, 'joins'=>array( array( 'table' => 'orderitems', 'alias' => 'Orderitem', 'type' => 'INNER', 'conditions' => array('Order.id = Orderitem.order_id')), array( 'table' => 'products', 'alias' => 'Products', 'type' => 'INNER', 'conditions' => array('Product.id = Orderitem.product_id', 'Product.vendor_id'=>$this->data['Order']['vendor_id'])));
Hope this helps, good luck
这篇关于递归条件下的Cakephp分页的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!