2012-07-10 49 views
1

我知道解決方案很簡單,可能與可容納行爲有關,但我無法使其工作。沒有所有的嘗試CakePHP 2.0:顯示相關記錄

這是這種情況。我想顯示活動的詳細信息(例如會議)。每個事件發生在一個EventVenue中,每個EventVenue都位於一個國家。

所以在以下國家型號存在:

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

在EventVenue模型屬於關聯關聯後

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

而且在事件模型hasOne關聯後

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

我想要的是在事件中呈現的頁面上顯示國家名稱控制器。我確實得到了所有的Event和EventVenue數據,但是沒有檢索到相關的場地國家。

的數據通過以下方式獲取

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

我怎麼也得從數據庫中獲取的國家名稱(如荷蘭)?我想是這樣的,但沒有奏效:

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

你的event_venues表有一個country_id字段填充? – Dave 2012-07-10 17:53:09

+0

是的,它確實有。 – 2012-07-11 07:55:59

+0

你不需要包含它自己 - 也就是說你不應該在'contains'數組中有'Event' – Dave 2012-07-11 12:35:57

回答

0

試試這個:

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

更新

原來findBy不支持中容納。您可以使用它來得到期望的結果:public $actsAs = array('Containable');

+0

這將導致以下錯誤: 錯誤:SQLSTATE [42S22]:Column未找到:1054未知列'事件'。在'字段列表'中 確實沒有事件列,只有一個事件表,以及對一個事件的引用是由一個列event_id(就我所知的CakePHP喜歡它的方式)所作出的 – 2012-07-11 07:59:03

+0

Thnx tyjkenn訣竅! – 2012-07-15 19:03:30

+0

tought我已經做到了,但它現在被接受。 – 2012-07-16 06:44:00

0

試試這個方法:

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

遞歸2是壞的。應該幾乎總是使用遞歸-1。我知道的大多數人甚至將它設置爲AppModel中的默認值,因此您不必更改它。 – Dave 2012-07-11 12:34:15

+0

它仍然有效,但。它只是慢一點。 – tyjkenn 2012-07-15 19:11:58

0

您需要設置遞歸

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

哦,確保您在模型中有這到2之前,你發現,像這樣的事情

$this->Event->recursive = 2; 

與此,你會得到夏娃nt,EventVenue和國家一擊

希望它有幫助