2016-05-13 9 views
0

私は外部キーを使ってProfilehasManyという関係を持つUserエンティティを持っています。私は、私がリンクされProfileエンティティ私は私がまたきTrying to get property of non-objectリンクされたCakePHP3エンティティからデータを取得する

を取得しようとどのような

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

nameプロパティにアクセスできる仮想フィールドを作成しようとしている私のUserクラス内

試しました:

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

私はこのデータを取得するには、Cake\ORM\Tableしかし私はそれを許すことを望んでいる。

私は間違っていますか?

P.S. 2つのテーブルの間に確実にリンクされたデータがあります。

+0

のアレイであります関係はテーブル/テーブルクラス間であり、エンティティではなく、エンティティはダムデータコンテナであり、それらは知らない(または知るべきではない)anytあなたはあなたがそのコンテキスト内のエンティティについて話しているとき、人々はあなたを誤解するかもしれません。つまり、エラーに遭遇したときの最初のステップは、オブジェクトではないときに、参照されたプロパティが実際に_is /保持しているものをデバッグすることです(btwの場合は実際には間違っています)。そのようなデバッグの詳細は常にあなたの質問に含まれるべきであり、しばしばそのような情報を収集するときに問題を解決する。 – ndm

答えて

0

答えは、それがリンクされたエンティティデータを取得するために「積極的なロード」を使用し、代わりに

をどのように動作するかではありません

のようです。つまり、find()を使用するときはcontainメソッドを使用します。

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

またはクエリオブジェクト自体で:この例では

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

$queryプロフィールエンティティが$query->profiles即ちユーザエンティティ

と一緒にオブジェクトが含まれますプロフィールエンティティ

関連する問題