递归条件下的Cakephp分页 [英] Cakephp pagination on recursive conditions

查看:118
本文介绍了递归条件下的Cakephp分页的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我会对这个问题发疯,请别人帮助我:)



我有这个型号:



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'])){
$ 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';
pre>

或者,如果你想,你可以设置递归到-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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆