我在FilesController中,我正在尝试根据其订单属于当前用户的条件获取文件。
FilesController
// Check the file exists and that it belongs to the user
$this->File->find('first', array(
'conditions' => array(
'File.id' => $id,
'Order.Customer.id' => $this->Auth->user('id')
),
'recursive' => 2
));
Cake SQL错误
Unknown column 'Order.Customer.id' in 'where clause'
我正在尝试让SQL将orders
加入files
,然后将customers
加入orders
,但我无法弄清楚如何加入客户表,虽然我确信我之前已经这样做了。我已经尝试了所有我能想到的条件,并使用contains
。
这是我的模特关系:
客户模式
class Customer extends AppModel {
public $hasMany = array('Order');
}
订单型号
class Order extends AppModel {
public $belongsTo = array('Customer');
public $hasMany = array('File');
}
文件模型
class File extends AppModel {
public $belongsTo = array('Order');
}
答案 0 :(得分:0)
尝试使用'joins'参数加入表格。有时候“包含”不起作用,你需要依靠它。
$this->File->find('first', array(
'conditions' => array(
'File.id' => $id,
'Order.Customer_id' => $this->Auth->user('id')
),
'joins' => array(
array(
'table' => 'orders',
'alias' => 'Order',
'type' => 'LEFT',
'conditions' => array('File.orders_id = Order.id')
),
array(
'table' => 'customers',
'alias' => 'Customer',
'type' => 'LEFT',
'conditions' => array('Customer.orders_id = Order.id')
)
)
));
答案 1 :(得分:0)
您可能希望使用Containable(http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html),因为它是最简单的解决方案。您不能使用Order.Customer.id,因为Cake不会嵌套这样的条件。手动连接也可以。
答案 2 :(得分:0)
$this->loadModel('Customer');
$customer = $this->Customer->findById($this->Auth->user('id'), array(
'conditions' => array(
'File.id' => $id
),
'recursive' => 2
));
订单可以访问:
pr($customer['Order']);
文件可以访问:
pr($customer['File']);
答案 3 :(得分:0)
我意识到在这个实例中没有必要实际加入customers表,因为orders表已经有了customer_id。
$this->File->find('first', array(
'conditions' => array(
'File.id' => $id,
'Order.customer_id' => $this->Auth->user('id')
)
));