Cakephp pagination on recursive conditions

試著忘記壹切 提交于 2020-03-02 06:59:28

问题


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 :(


回答1:


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



来源:https://stackoverflow.com/questions/6561745/cakephp-pagination-on-recursive-conditions

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!