Доктрина DQL ГДЕ (условие1 и условие2) ИЛИ (условие3 и условие4)

Я пытаюсь сделать что-то похожее на этот SQL в DQL:

SELECT * FROM TBL
WHERE (something = foo AND something2 = foo2) 
OR (something3 = foo3 AND something4 = foo4)

У меня есть это, кажется, работает, но я серьезно в этом сомневаюсь; что ты думаешь ?

->where('something = :foo')
->setParameter('foo', $fooValue)
->andWhere('something2 = :foo2')
->setParameter('foo2', $fooValue2)

->orWhere('something3 = :foo3')
->setParameter('foo3', $fooValue3)
->andWhere('something4 = :foo4')
->setParameter('foo4', $fooValue4)

->getQuery()
->getArrayResult()
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
0
69
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать метод $em->createQuery

$query = $em->createQuery('SELECT t FROM Tbl t WHERE (t.something = :foo AND t.something2 = :foo2) OR (t.something3 = :foo3 AND t.something4 = :foo4)');
$query->setParameter(...);
$result = $query->getResult();
Ответ принят как подходящий

Ваши сомнения верны, и вы можете столкнуться с проблемой приоритета оператора с текущим кодом, который у вас есть. Чтобы написать эквивалентный запрос с условиями группировки в доктрине, вы можете написать следующим образом

->where(
    $qb->expr()->orX(
            $qb->expr()->andX(
                $qb->expr()->eq('something', ':foo'),
                $qb->expr()->eq('something2', ':foo2')
            ), 
            $qb->expr()->andX(
                $qb->expr()->eq('something3', ':foo3'),
                $qb->expr()->eq('something4', ':foo4')
            )
        )
)
->setParameter('foo', $fooValue)
->setParameter('foo2', $fooValue2)
->setParameter('foo3', $fooValue3)
->setParameter('foo4', $fooValue4)
->getQuery()
->getArrayResult();

Doctrine Query Builder вложил условия orX и andX с объединением

Другие вопросы по теме