2016-02-24 158 views
0

我試圖弄清楚它是如何可能獲得在CakePHP中3.X嵌套子對象的值檢索嵌套推薦數據CakePHP中3.X

一個基本的例子包括三個實體:

服務器,機架,OPERATING_SYSTEM

表:

架 - ID,名稱

服務器 - ID,主機名,rack_id,operating_system_id

Operating_systems - ID,名稱

機架式服務器的hasMany

服務器屬於關聯OperatingSystems &屬於關聯架

我怎麼能在我的機架視圖引用機架>服務器 - > OperatingSystem->的名字嗎?

//View.ctp 
<?php foreach ($rack->servers as $servers): 
echo h($servers->hostname) 
echo h($servers->operating_system->name) //Doesn't output OS Name 
endforeach; ?> 

//View Function in RacksController: 
public function view($id = null) 
{ 
    $rack = $this->Racks->get($id, [ 
     'contain' => ['Servers'] 
    ]); 
    $this->set('rack', $rack); 
    $this->set('_serialize', ['rack']); 
} 

不知道這是否最終成爲控制器中的自定義查詢或者是否有內置的Cake語法來完成我所需的操作。謝謝你的幫助。

回答

0

找到了答案:

Cake 3.x passing-conditions-to-contain

$rack = $this->Racks->get($id, [ 
     'contain' => ['Servers','Servers.OperatingSystems'] 
    ]); 

解決方案是使用點號爲深嵌套的關聯。感謝aknd將我指向正確的方向。

0

嘗試:

$rack = $this->Racks->get($id, [ 
    'contain' => ['Servers' => 'OperatingSystems'] 
]); 
+0

嗯在控制器中試過這個,最後得到:錯誤:不支持的操作數類型 –

+0

在@aknd的解決方案中,需要將OperatingSystems放在另一個數組中(即''contains'=> ['Servers'= > ['OperatingSystems']]')。這將解決「不受支持的操作數類型」錯誤,並讓您使用數組表示法,該表示法可能比點表示法更清晰。 –