0

我在 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
));

蛋糕 SQL 错误

Unknown column 'Order.Customer.id' in 'where clause'

我试图让 SQL left join toorders然后filesleft join customersto 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');

}
4

4 回答 4

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')
        )
    )
));
于 2012-12-04T16:46:31.520 回答
0

您可能想要使用 Containable (http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html),因为它是最简单的解决方案。您不能使用 Order.Customer.id,因为 Cake 不会嵌套这样的条件。手动连接也可以。

于 2012-12-04T16:46:41.800 回答
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']);
于 2012-12-04T16:49:54.077 回答
0

我意识到在这种情况下实际上不需要加入customers 表,因为orders 表已经有customer_id。

$this->File->find('first', array(
    'conditions' => array(
        'File.id' => $id,
        'Order.customer_id' => $this->Auth->user('id')
    )
));
于 2012-12-05T11:20:39.020 回答