使用DQL选择多对多实体集合


Select many to many entity collection using DQL

我必须拥有与链接表具有ManyToMany关系的实体。像这样:

class User
{
    /**
     * @ORM'ManyToMany(targetEntity="Post")
     * @ORM'JoinTable(name="favorite_posts",
     *      joinColumns={@ORM'JoinColumn(name="user_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM'JoinColumn(name="post_id", referencedColumnName="id")}
     *      )
     **/
    private $favoritePosts;
}
class Post
{
    /**
     * @ORM'ManyToMany(targetEntity="User", mappedBy="favoritePosts")
     */
    private $usersInFavorite;
}

我可以使用用户实体对象获得所有用户喜欢的帖子

$favorites = $user->getFavoritesPosts();

但我不知道如何使用DQL或Doctrine Query Builder来获得完全相同的结果。在result下,我指的是POST实体对象的数组。

基于此示例

如果你想通过dql提取,

$dql = "SELECT p FROM Posts p INNER JOIN p.$usersInFavorite u WHERE u= ?1";
$query = $entityManager->createQuery($dql)
                       ->setParameter(1, $user);
$favoritePosts = $query->getResult();

这次我测试了一下,结果符合要求。

如果您有用户实体的id而不是实体,那么相同的代码将使用$user作为用户的id。