我必须拥有与链接表具有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。