2011-11-08 86 views
0

我有以下的数据库表:的CakePHP中可容纳的行为未正常工作

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

我已经设置这三个模型的使用中可容纳的行为使用:

public $actsAs = array('Containable'); 

当我使用以下来获得产品的细节随着艺术IST的名字:

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

我得到警告:

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

,我只拿到产品的详细信息,即没有艺术家的名字。这是为什么发生?

回答

2

发生这种情况,因为你是在Product模型调用find操作,并且Person直接相关Product,而是间接地,通过它关系到Artist。在这种情况下,您的contain阵列应该是这样的:

$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' => '...' 
     ) 
    ) 
)