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

Cake SQL エラー

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

ordersSQL を左に結合させ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');

}
4

4 に答える 4

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 に答える
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) を使用することをお勧めします。Cake はそのような条件をネストしないため、Order.Customer.id は使用できません。手動結合も機能します。

于 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 に答える