2012-03-31 6 views
1

私のデータベースには、usermedia_contactの2つのテーブルがあります。 media_contactテーブルにはuser_idがあるので、明らかに、私の意図はユーザーに基づいてメディアの連絡先を選択できるようにすることです。Doctrine 2多対1リレーションシップが機能しない

私がいる問題は、これが失敗したということです。これは私に何も与えない

// VNN/PressboxBundle/Entity/User.php 
// $this in this case is a User object with id 26 
$customContacts = $em->getRepository('VNNPressboxBundle:MediaContact')->findByUser($this); 

$customContactsは空です。しかし、

mysql> select * from media_contact where user_id=26; 
+-----+-------------+-----------------------+---------------+---------+ 
| id | name  | email     | media_area_id | user_id | 
+-----+-------------+-----------------------+---------------+---------+ 
| 177 | Jason Swett | [email protected] |   NULL |  26 | 
| 183 | Sam   | [email protected]   |   NULL |  26 | 
+-----+-------------+-----------------------+---------------+---------+ 
2 rows in set (0.00 sec) 

実際には2つのオブジェクトが返されます。私は本当になぜこれが起こっているのか分かりません。ここで

私の注釈です:

// User.php 

/** 
* @ORM\OneToMany(targetEntity="MediaContact", mappedBy="user") 
*/ 
private $mediaContacts; 

-

// MediaContact.php 
/** 
* @ORM\ManyToOne(targetEntity="User", inversedBy="mediaContacts") 
* @ORM\JoinColumn(name="user_id", referencedColumnName="id") 
*/ 
private $user; 

間違って行くことができるもの?

答えて

1

あなたはそれを動作させるためには$this->getId()代わりの$thisを使用する必要があります。

$customContacts = $em->getRepository('VNNPressboxBundle:MediaContact')->findByUser($this->getId()); 
+0

を私はすべてのものをしなければならない場合は、のために 'findBy()'メソッドは何ですか?これらのメソッドはsymfony <2.0で動作しました。 symfony2(またはDoctrine 2など)の 'findBy()'メソッドの黙示的なバージョンをジョークとして単に含んでいましたか? –

+0

また、私は何も参加していません。類似の生のSQLクエリは 'SELECT * FROM media_contact WHERE user_id = 26'となります。そのクエリを実行するためにDoctrineに参加する必要がある場合、それは哀れです。私はそれが事実だとは思わない。 –

+0

findByメソッドは、作業しているエンティティを照会するのに便利です。あなたの場合:VNNPressboxBundle:MediaContact。関連ユーザーEntityを照会するには、JOINを使用して、リポジトリ・クラスのカスタム・メソッドDQL * OR *を使用して照会を構築する必要があります。 –

関連する問題