主义一对多情况:如何轻松获取相关实体

时间:2013-04-23 12:55:31

标签: symfony doctrine relationship findby

为简化起见,定义了两个实体: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外键来获取它们?

1 个答案:

答案 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查询。