CakePHP 2.0:显示相关记录

时间:2012-07-10 14:19:04

标签: cakephp associations cakephp-2.0

我知道解决方案很简单,可能与Containable行为有关,但我无法使其正常工作。没有所有的尝试

情况就是这样。我想显示活动的活动详情(例如会议)。每个事件都发生在EventVenue中,每个EventVenue都位于Country。

因此,在国家模型中,存在以下内容:

public $hasMany = array(
    'EventVenue' => array(
        'className' => 'EventVenue',
        'foreignKey' => 'country_id'
))

在EventVenue模型中,建立了BelongsTo关联

public $belongsTo = array(
    'Country' => array(
        'className' => 'Country',
        'foreignKey' => 'country_id'
))

在Event模型中,创建了一个hasOne关联

 public $hasOne = array(
    'EventVenue' => array(
        'className' => 'EventVenue',
        'foreignKey' => 'event_id',
 ))

我想要的是在EventsController中呈现的页面上显示国家/地区名称。我确实获得了所有Event和EventVenue数据,但未检索到该场地的相关国家/地区。

以下列方式检索数据

 $item = $this->Event->findBySlug($slug);

如何获取从数据库中检索到的国家/地区名称(例如荷兰)?我尝试过类似的东西但是没有用:

 $item = $this->Event->findBySlug($slug,array(
    'contain' => array(
        'Event' => array(
            'EventVenue' => array(
                'Country'
            )
        )
    )
 )

3 个答案:

答案 0 :(得分:0)

试试这个:

$item = $this->Event->findBySlug($slug,array(
    'contain' => array(
        'EventVenue' => array(
            'Country'
        )
    )
);

<强>更新

原来findBy不支持Containable。您可以使用它来获得所需的结果:

$item = $this->Event->find('first',array(
    'conditions' => array(
        'Event.slug' => $slug
    ),
    'contain' => array(
        'EventVenue' => array(
            'Country'
        )
    )
);

哦,确保你在模型中有这个:public $actsAs = array('Containable');

答案 1 :(得分:0)

尝试这种方法:

$this->Event->recusive = 2;
$item = $this->Event->findBySlug($slug);

答案 2 :(得分:0)

在进行查找之前,需要将递归设置为2,类似这样

$this->Event->recursive = 2;

有了这个,你将一次性获得Event,EventVenue和Country

希望有所帮助