2012-03-31 62 views
1

我在我的数据库中有两个表格:usermedia_contactmedia_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; 

可能是什么回事?

回答

1

你必须使用$this->getId()代替$this,以便为它工作:

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

如果我必须做的所有的东西,有什么'findBy()'方法?这些方法在Symfony <2.0中工作。他们是否在Symfony2(或Doctrine2或其他)中包含了一些默默无闻的findBy()方法作为笑话? – 2012-03-31 15:33:44

+0

另外,我没有加入任何东西。类似的原始SQL查询将是'SELECT * FROM media_contact WHERE user_id = 26'。如果我只是为了执行该查询而加入Doctrine,那将是可悲的。我怀疑是这样。 – 2012-03-31 15:35:58

+0

findBy方法可用于查询您正在处理的实体。在你的情况:VNNPressboxBundle:MediaContact。为了查询相关用户实体,您需要使用JOIN构建查询,在您的Repository类中使用DQL * OR *自定义方法。 – 2012-03-31 15:47:37