1
私のデータベースには、user
とmedia_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;
間違って行くことができるもの?
を私はすべてのものをしなければならない場合は、のために 'findBy()'メソッドは何ですか?これらのメソッドはsymfony <2.0で動作しました。 symfony2(またはDoctrine 2など)の 'findBy()'メソッドの黙示的なバージョンをジョークとして単に含んでいましたか? –
また、私は何も参加していません。類似の生のSQLクエリは 'SELECT * FROM media_contact WHERE user_id = 26'となります。そのクエリを実行するためにDoctrineに参加する必要がある場合、それは哀れです。私はそれが事実だとは思わない。 –
findByメソッドは、作業しているエンティティを照会するのに便利です。あなたの場合:VNNPressboxBundle:MediaContact。関連ユーザーEntityを照会するには、JOINを使用して、リポジトリ・クラスのカスタム・メソッドDQL * OR *を使用して照会を構築する必要があります。 –