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

我已将三个模型中的每一个都设置为使用 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 回答