为简化起见,定义了两个实体:User和Comment。用户可以发布许多评论,每个评论只分配了一个用户,因此评论实体具有:
/**
* @var \Frontuser
*
* @ORM\ManyToOne(targetEntity="Frontuser")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="ownerUserID", referencedColumnName="id")
* })
*/
private $owneruserid;
然而,在行动中:
$orm = $this->getDoctrine()->getManager();
$repo = $orm->getRepository('CompDBBundle:Comment');
$repo->findBy(array('owneruserid' => $uid);
发生错误,没有像owneruserid
这样的字段。
如何获取所有用户的评论呢?我的数据库中的类似关系也是如此 - 看起来好像你不能用外键作为参数运行find()
。我相信Doctrine应该自动生成/识别函数$user->getComments()
,以便有效,快速地访问相关实体。
示例很简单但是,如果有更多实体以相同的方式与我的用户相关,该怎么办?我是否必须为每个存储库声明存储库并尝试通过它的owneruserid
外键来获取它们?
答案 0 :(得分:2)
使用doctrine,当您定义相关实体时,它的类型是实体类(在本例中为FrontUser)。因此,首先,您的相关实体变量名称具有误导性。应该是例如。
private $ownerUser;
然后,为了在相关的实体字段上执行findBy,您必须提供实体实例,例如。
$orm = $this->getDoctrine()->getManager();
$userRepo = $orm->getRepository('CompDBBundle:FrontUser');
$user = $userRepo->findById($uid);
$commentRepo = $orm->getRepository('CompDBBundle:Comment');
$userComments = $commentRepo->findByOwnerUser($user);
如果您没有或想要检索用户实体,则可以使用带有'uid'作为参数的DQL查询。