У меня есть три сущности, связанные с различными отношениями:Как получить доступ к атрибуту LEFT JOIN в отношении ManyToMany?
-Band-
name
...
tours (ManyToMany with Tour)
shows (OneToMany with Show)
-Tour-
name
...
bands (ManyToMany with Band)
$shows(OneToMany with Show)
-Show-
date
...
band(ManyToOne with Band, nullable)
tour(ManyToOne with Tour, nullable)
Я могу настроить Показать для диапазона (то есть show_tour NULL), а также Показать на Туре (тогда show_band является NULL).
Теперь, я хотел бы получить все Show
для данного Band
. Мой DQL как это:
public function findAllShowsToComeFor($band)
{
$date = new \DateTime('now');
return $this->createQueryBuilder('s')
->leftJoin('s.band', 'band')
->where('band.id = :bid')
->setParameter('bid', $band->getId())
->leftJoin('s.tour', 'tour')
->where('tour.bands = :tid')
->setParameter('tid', $band->getId())
->andWhere('s.day >= :date')
->setParameter('date', $date->format('Y-m-d'))
->orderBy('s.day', 'ASC')
->getQuery()
->getResult();
}
Конечно, это вызывает ошибку синтаксиса ([Семантическая Error] линии 0, столбец 92 вблизи 'полосы =: TID': Ошибка:.. Invalid PathExpression StateFieldPathExpression или SingleValuedAssociationField ожидается) , из-за этих линий:
->leftJoin('s.tour', 'tour')
->where('tour.bands = :tid')
->setParameter('tid', $band->getId())
я должен был бы сделать что-то вроде:
->leftJoin('s.tour', 'tour')
->where('tour.bands.id IN :tid')
->setParameter('tid', $band->getId())
, но это не возможно ...
Может ли кто-нибудь помочь?
Работаю красиво! Благодаря! – VinZ