DQL-запрос ManyToMany IN - PullRequest
0 голосов
/ 06 октября 2018

Этот запрос не работает.Что может быть не так?Пост имеет автора (сущность пользователя).У пользователя есть подписчики (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 голосов
/ 06 октября 2018

Я предполагаю, что ваш код находится в репозитории, как и должно быть ...

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();
}

В качестве примечания, вы должны быть осторожны с кавычками.
MakeОбязательно используйте двойные кавычки при использовании DQL (это верно и для SQL).
Причина в том, что вам нужны простые кавычки для строк в запросах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...