DQL查询ManyToMany IN

时间:2018-10-06 14:17:29

标签: symfony doctrine dql

此查询无法正常工作。有什么事吗帖子有作者(用户实体)。用户具有关注(ManyToMany自导向)

我正在尝试获取我关注的所有用户帖子

$userId = $this->getUser()->getId();
$qb = $em->createQueryBuilder();
$qb2 = $qb;
$qb2 = $em->createQueryBuilder()
    ->select('u.following')
    ->from('AppBundle\Entity\User', 'u')
    ->where('u.id = :userId');

    $qb->select('p')
    ->from('AppBundle\Entity\Post', 'p')
    ->where($qb->expr()->In('p.author', $qb2->getDQL()));

    $qb->setParameter('userId', $userId);
    $dql = $qb->getDQL();

1 个答案:

答案 0 :(得分:0)

我将假设您的代码在存储库中,因为它应该是...

src / AppBundle / Controller / PostController.php

$em=$this->getDoctrine()->getManager();
$myResultCollection=$em->getRepository(Post::class)->myCustomQuery($this->getUser());

src / AppBundle / Repository / PostRepository.php

public function myCustomQuery(User $user) {
    $em=$this->getEntityManager();
    $qb=$em->createQueryBuilder();

    return $qb->select("p")
              ->from(Post::class, "p")
              ->where($qb->expr()->in("p.author",
                  $qb->select("u.following")
                     ->from(User::class, "u")
                     ->where("u.id=:USERID")
                     ->getDQL()))
              ->setParameters(array('USERID'=>$user->getId()))
              ->getQuery()
              ->execute();
}

作为旁注,您应谨慎使用引号。
确保在使用DQL时使用双引号(对于SQL也是这样)。
原因是因为查询中的字符串需要简单的引号。