Синтаксическая ошибка - строка 0, столбец 469: Ошибка: ожидаемая известная функция, получено "IF"

Привет я использую конструктор запросов доктрины для выполнения запроса..

Это мой запрос..

return $this->createQueryBuilder('sp')
                        ->select('sp.id, sp.price, sp.offer_price AS offerPrice, sp.price_kg AS PriceKg, '
                                . 'sp.offer_price_kg AS offerPriceKg, sp.status AS status, s.name AS storename')
                        ->addSelect("(CASE WHEN (sp.name IS NULL) THEN p.name ELSE sp.name END) AS spname")
                        ->addSelect("(CASE WHEN (sp.sku IS NULL) THEN p.sku ELSE sp.sku END) AS spsku")
                        ->addSelect("(CASE WHEN (sp.main_image IS NULL) THEN p.main_image ELSE sp.main_image END) AS sp_main_image")
                        ->join('sp.store', 's')
                        ->join('sp.product', 'p')
                        ->Where('IF(sp.name IS NULL, p.name, sp.name) LIKE :val')
                        ->orWhere('sp.sku LIKE :val')
                        ->setParameter('val', '%' . $search . '%')
                        ->getQuery();

кажется, что если условие дает ошибку,

->Where('IF(sp.name IS NULL, p.name, sp.name) LIKE :val')

Это ошибка, которую я получаю,

[Синтаксическая ошибка], строка 0, столбец 469: Ошибка: ожидаемая известная функция, получено "IF"

1 ответ

Ваш синтаксис в любом случае сбивает с толку, почему бы вам не сделать

->where('sp.name IS NULL AND p.name LIKE :val AND sp.name LIKE :val')

В любом случае, в Doctrine нет встроенной функции "если", поэтому, если вам нужно что-то конкретное, вам нужно запрограммировать это самостоятельно.

https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/cookbook/dql-user-defined-functions.html

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