2016-05-13 38 views
0

我有一個User實體,通過user_id外鍵與關係到Profile從鏈接的CakePHP3實體獲取數據

在我的User類我試圖創建一個虛擬的領域,所以我可以訪問鏈接Profile實體

protected $_virtual = ['profile_name']; 
protected function _getProfileName() 
{ 
    return $this->profile->name; 
} 

無論我嘗試,我得到Trying to get property of non-object

我也的name財產嘗試:

$this->_properties['profile']->name; 
$this->profile->_properties['name']; 

我知道我可以通過使用建立一個查詢來獲得這些數據但我希望能提供這種支持。

我在做什麼錯?

p.s.這兩張表格之間肯定有關聯的數據。

+0

關係在你的表/表類之間,而不是你的實體,實體是啞數據容器,他們不知道(或不應該知道)在討論關係時,當你在討論關於實體的情況時,人們可能會誤解你。這就是說,遇到這個錯誤時的第一步應該是調試被引用的屬性實際上是什麼_is/holds_,當它不是一個對象時(如果它在哪裏,它實際上是錯的)。這些調試細節應該始終包含在您的問題中,通常問題在收集這些信息時會自行解決。 – ndm

回答

0

答案似乎是

這不是它的工作原理

相反,使用「預先加載」,讓鏈接的實體數據。也就是說在使用find()時使用contain方法:

例如,

$users = TableRegistry::get('users'); 
$query = $users->find('all', ['contain' => ["Profiles"]]) 
       ->where(['id' => $userId]) 
       ->first(); 

或查詢對象本身上:

$query->contain(['Profiles']); 

在這個例子中$query將包含資料實體與所述用戶實體

$query->profiles對象沿是資料的實體的陣列