CakePHP контейнер за присъединяване без търсене на допълнителна таблица

Опитвам се да съединя две таблици и намерих тази публикация за постигането му с помощта на контейнери .

Таблиците, към които се опитвам да се присъединя, са orders и order_items. Ето кода в моя контролер Order и Order_Item

Class OrderItem extends AppModel {
    public $useTable = 'order_items';
    public $actsAs = array('Containable');
    public $belongsTo = array('Order');
}

class Order extends AppModel {  
    public $actsAs = array('Containable');
    public $hasMany = array('OrderItem');
}

Ето заявката в OrdersController

$order_list = $this->Order->find('all', array(              
                                'contain' => array('OrderItem'),
                                'conditions' => array(
                                'Order.order_status' => 'filled',
                                'OrderItem.item_status' => 'filled'
                                )
                            ));

В момента не изглежда да прави запитвания към таблицата order_items. Получавам следната грешка

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Order_Item.item_status' in 'where clause'

При по-нататъшна проверка, заявката дори не търси в таблицата order_items, а само в таблицата с поръчки. Предполагам, че това е вярно, защото не намери колоната, която посочих в условията.

Ето получената заявка

SQL Query: SELECT `Order`.`id`, `Order`.`userid`, `Order`.`order_status`, `Order`.`email`, 
`Order`.`total`, `Order`.`fullName`, `Order`.`address`, `Order`.`city`, `Order`.`state`, 
`Order`.`zip`, `Order`.`created`, `Order`.`modified` FROM `ordersdb`.`orders` AS `Order` 
 WHERE `Order`.`order_status` = 'filled' AND `OrderItem`.`item_status` = 'filled'

person user2443591    schedule 14.06.2013    source източник


Отговори (1)


Containable прави отделна заявка за всеки модел, който предавате на ключа „Contain“. Във вашия случай полето item_status не съществува в таблицата с поръчки, затова имате тази грешка.

Мисля, че трябва да направите нещо подобно

 $order_list = $this->Order->find('all', array(              
                        'contain' => 'OrderItem.item_status == filled',                                                                 
                        'conditions' => array(
                        'Order.order_status' => 'filled'
                        )
                    ));

Вижте готварската книга за повече информация http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html

person Rudy Lee    schedule 14.06.2013