Я изучаю 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);