0

我正在尝试加入两个表,我发现这篇文章是关于使用可包含物完成它的。

我要加入的表是订单和 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 表,而只是搜索了 orders 表。我认为这是真的,因为它没有找到我在条件中指定的列。

这是结果查询

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

1 回答 1

-1

Containable 为您传递到“包含”键的每个模型执行单独的查询。在您的情况下,订单表中不存在 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

于 2013-06-14T04:13:31.923 回答