Доктрина ЕСЛИ Заявление

У меня есть следующий код в Doctrine:

return $this->createQueryBuilder('t')
          
->where('t.status LIKE :status')             
->orderBy('t.createdAt', 'DESC')             
->setParameter('status', $status)             
->setMaxResults($limit)             
->getQuery()             
->getResult()  

       ;

Однако реальный SQL-запрос, который я хочу построить, таков:

SELECT t.*, 
IF(deleted = 1, 4, status) AS status 
FROM trm t  
WHERE status = 3  ORDER BY created_at DESC;

По сути, замена столбца состояния на тот, который = 4, если столбец «удален» имеет значение true.

Как я могу воссоздать это в запросе доктрины выше?

Я пытался изучить ->expr()->eq, но не могу найти простых примеров для подражания. Я даже не уверен, что они мне нужны.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
64
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

вам понадобятся DoctrineExtnesions ( https://github.com/beberlei/DoctrineExtensions )

orm:
    ..
    entity_managers:
            ....
            dql:
                ....
                string_functions:
                    IF: DoctrineExtensions\Query\Mysql\IfElse

но изменение объекта таким образом не является хорошей практикой.

Ответ принят как подходящий

По умолчанию Doctrine не поддерживает выражения IF. Вместо этого поддерживаются выражения CASE, которые можно преобразовать в: CASE t.deleted WHEN 1 THEN 4 ELSE t.status END

Ваш исходный запрос, преобразованный в ORM QueryBuilder, будет выглядеть так:

$this->createQueryBuilder('t')
    ->addSelect('CASE t.deleted WHEN 1 THEN 4 ELSE t.status END AS status')
    ->where('t.status LIKE :status')
    ->orderBy('t.createdAt', 'DESC')
    ->setParameter('status', $status)
    ->setMaxResults($limit)
    ->getQuery()
    ->getResult();

Однако это не изменит значение, отправленное объекту, а вместо этого создаст результат вложенного массива с разделенным значением status.

array
    array
        [0] => Entity (Object)
        ['status'] => 4
    array
        [0] => Entity (Object)
        ['status'] => 4

    // ...

Спасибо, это примерно так близко, как я собираюсь получить, я думаю :)

richard_b 04.04.2022 09:32

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

Почему unix_timestamp('1970-01-02'); возвращает 66600 вместо 86400 (60 x 60 x 24) в mysql?
Кто я продолжаю получать «Нет» в результате запуска моего кода Python в IDLE?
Команда Mysql для отображения одного столбца из двух таблиц (столбец с одинаковым именем в обеих таблицах) с использованием двух разных условий
Генерировать HTML-код с помощью PHP автоматически после загрузки данных в MySql
Gitlab-ci запускает докер mysql и подключается к нему с ошибкой ERROR 2003 (HY000): не удается подключиться к серверу MySQL на «localhost» (111)
Необходимо ли освобождать наборы результатов для постоянных соединений mysqli?
Как выбрать как суммарное значение всех строк, так и значения в некоторых конкретных строках?
MYSQL - получить данные из таблицы, которые не связаны с другой таблицей
Какой должна быть структура базы данных для создания листа Excel, подобного представлению? означает, что таблицы должны храниться в формате json или создавать таблицы для ячеек, строк и столбцов
Возврат только из командной строки -> после попытки выполнить процедуру