Прежде всего, andWhere
обычно идет после where
.
Во-вторых, предикат WHERE
не допускается в условиях соединения, если он зарезервирован для части SQL. Вместо этого используйте WITH
:
->innerJoin("MYBundle:SubscriptionSettings", "ES", "WHERE", "ES.event = E.id")
В-третьих, вы можете использовать andX
и orX
$qb = this->createQueryBuilder("E");
$qb
->select(...)
->innerJoin(...)
->where(
$qb->expr()->orX(
$qb->expr()->andX(
$qb->expr()->eq('ES.subscriptionStartMode', ':modePlan'),
$qb->expr()->gt('ESP.publicationPlannedFromDate', ':from'),
$qb->expr()->lte('ESP.publicationPlannedFromDate', ':to'),
),
$qb->expr()->andX(
$qb->expr()->eq('ES.subscriptionStartMode', ':modeSchedule'),
$qb->expr()->gte('ESP.subscriptionScheduledStarDate', ':from'),
$qb->expr()->lte('ESP.subscriptionScheduledStarDate', ':to'),
),
)
)
->setParameter('modePlan', 'PUBLICATION')
->setParameter('modeSchedule', 'SCHEDULED')
->setParameter('from', ...)
->setParameter('to', ...);
Пожалуйста, обратите внимание, что лучше установить параметры через setParameter
, даже если он установлен c.
Вы можете смешивать операторы orX и andX по своему усмотрению. Узнайте больше об операторах DQL в официальных документах