1
我在我的数据库中有两个表格:user
和media_contact
。 media_contact
表有user_id
,所以显然,我的意图是能够根据用户选择媒体联系人。学说2多对一关系不起作用
我遇到的问题是,这种失败:
// 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)
它应该真的返回两个对象。我真的不明白为什么会发生这种情况。
这里是我的注解:
// 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(或Doctrine2或其他)中包含了一些默默无闻的findBy()方法作为笑话? – 2012-03-31 15:33:44
另外,我没有加入任何东西。类似的原始SQL查询将是'SELECT * FROM media_contact WHERE user_id = 26'。如果我只是为了执行该查询而加入Doctrine,那将是可悲的。我怀疑是这样。 – 2012-03-31 15:35:58
findBy方法可用于查询您正在处理的实体。在你的情况:VNNPressboxBundle:MediaContact。为了查询相关用户实体,您需要使用JOIN构建查询,在您的Repository类中使用DQL * OR *自定义方法。 – 2012-03-31 15:47:37