我正在尝试加入两个表,我发现this post正在使用可包含的内容完成它。
我要加入的表是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'
答案 0 :(得分:-1)
Containable正在为您传递到“Contain”键的每个模型执行单独查询。在您的情况下,Order表中不存在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