0

次のデータベース テーブルがあります。

products
********
id
title
artist_id

artists
*******
id
profile
rating
person_id

people
******
id
full_name

次のモデルの関連付け:

Product Model
*************
public $belongsTo = array(
    'Artist' => array(
        'className'  => 'Artist'
        'foreignKey' => 'artist_id'
    )
);

Artist Model
************
public $belongsTo = array(
    'Person' => array(
        'className'  => 'Person'
        'foreignKey' => 'person_id'
    )
);
public $hasMany = array(
    'Product' => array(
        'className'  => 'Product'
        'foreignKey' => 'product_id'
    )
);

Person Model
************
public $hasOne = array(
    'Artist' => array(
        'className'  => 'Artist'
        'foreignKey' => 'person_id'
    )
);

以下を使用して、3 つのモデルのそれぞれが Containable 動作を使用するように設定しました。

public $actsAs = array('Containable');

次を使用して、アーティストの名前とともに製品の詳細を取得すると:

$this->Product->find('first', array('conditions' => array('Product.id' => $id), 'contain' => 'Person.full_name'))

警告が表示されます:

Model "Product" is not associated with model "Person"

そして、私は製品の詳細のみを取得します。つまり、アーティストの名前はありません。なぜこうなった?

4

1 に答える 1

2

これは、モデルでfind操作を呼び出しているために発生しており、 との関係によって間接的にではなく、 との関係によって間接的に関係しています。この場合、配列は次のようになります。ProductPersonProductArtistcontain

$this->Product->find('first', array(
    'conditions' => array('Product.id' => $id), 
    'contain' => array('Artist' => 'Person.full_name')
));

これは次のような結果を返します

array(
    [Product] => array(...),
    [Artist] => array(
        [Person] => array(
             'full_name' => '...'
        )
    )
)
于 2011-11-09T01:49:25.327 に答える