2011-07-03 68 views
2

我在这个问题上要疯了请人可以帮我:)CakePHP的分页

我有这个型号:

秩序的hasMany - > OrderItem的hasOne - >产品

产品有字段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子句' 错误未知列 'Product.vendor_id'。 我已经试过几件事情与中容纳,但没有成功:(

回答

5

也许如果你设置了递归属性为2只,如果VENDOR_ID设置:

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'; 

或者,如果你愿意,你可以设置递归为-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->data['Order']['vendor_id']))); 

希望这会有所帮助,祝你好运

+0

第二个版本的作品,感谢 – sipiatti

+0

谢谢你的回答帮了我很多!你是上帝! –