Cakephp нумерация страниц на рекурсивных условиях - PullRequest
2 голосов
/ 03 июля 2011

Я схожу с ума по этому вопросу, пожалуйста, кто-нибудь, помогите мне:)

У меня есть эти модели:

Заказать 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');

Выдает неизвестный столбец Product.vendor_id в ошибке where.Я пробовал несколько вещей с Containable, но безуспешно: (

1 Ответ

5 голосов
/ 03 июля 2011

возможно, если вы установите рекурсивный атрибут равным 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'])));

Надеюсь, это поможет, удачи

...