Пагинация 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');

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


person sipiatti    schedule 03.07.2011    source источник


Ответы (1)


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

Надеюсь это поможет. Удачи

person pleasedontbelong    schedule 03.07.2011
comment
Спасибо, ваш ответ мне очень помог! Ты Бог !! - person Pratik; 16.09.2014