Поиск с Symfony и доктриной в отношениях многих ко многим - PullRequest
0 голосов
/ 20 июня 2019

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

У меня есть Пользователь, Навыки и Настроения.

Пользователь:

/**
     * @ORM\ManyToMany(targetEntity="App\Entity\Mood")
     * @ORM\JoinTable(
     *  name="user_mood",
     *  joinColumns={@ORM\JoinColumn(name="mood_id", referencedColumnName="id")},
     *  inverseJoinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}
     * )
     */
    private $moods;

/**
     * @ORM\ManyToMany(targetEntity="App\Entity\Skill")
     * @ORM\JoinTable(
     *  name="user_skill",
     *  joinColumns={@ORM\JoinColumn(name="skill_id", referencedColumnName="id")},
     *  inverseJoinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}
     * )
     */
    private $skills;

Все в порядке в моей БД, у меня есть сводная таблица и т. Д., И т. Д., Но теперь я хочу "искать" всех пользователей с некоторыми навыками и настроениями, что-то вроде этого в качестве полезной нагрузки:

$mood = ['test','test1'];
$skill = ['skillTest'];

Я пытаюсь получить всех пользователей по меньшей мере с 1 из каждого из этих параметров.

Вот мой код:

$qb = $this->em->createQueryBuilder();
        $qb->select('u')
            ->from('App:User', 'u')
            ->where('u.deletedAt is null')
            ->andWhere('u.status = :status');

        $qb->leftJoin('App:Mood', 'm')
                    ->andWhere('m.title IN (:moodArray)')->setParameter('moodArray', $params['mood']);

        $qb->setParameter('status', $status)
            ->orderBy('u.createdAt', 'DESC')
            ->setMaxResults($limit)
            ->setFirstResult($offset);

, но у меня есть эта ошибка, используяLEFT JOIN

1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE u0_.status = 'ONLINE' AND m1_.title IN ('test' at line 1"

Если я использую только JOIN, я получаю всех пользователей и не являюсь моей конечной целью: b Любой совет?THX много

РЕДАКТИРОВАТЬ: я изменяю свой «код» с этим, и результат всегда пустой массив, с LEFT JOIN или JOIN всегда [] U, U

$qb = $this->em->createQueryBuilder();
        $qb->select('u')
            ->from('App:User', 'u')
            ->where('u.deletedAt is null')
            ->andWhere('u.status = :status');

        $qb->leftJoin('u.moods', 'm')
                    ->andWhere('m.title IN (:moodArray)')->setParameter('moodArray', $params['mood']);

        $qb->setParameter('status', $status)
            ->orderBy('u.createdAt', 'DESC')
            ->setMaxResults($limit)
            ->setFirstResult($offset);
...