Подтвердить что ты не робот

Сохранение состояния "CASE WHEN" в объекте Doctrine2

Как и в Doctrine 2.1, оператор CASE WHEN поддерживается, но на нем не так много документации. Моя цель - установить логическое значение, чтобы узнать, понравилось ли пользователю пользователю:

       ->addSelect("CASE WHEN f.photo is NULL THEN false ELSE true END as is_favorited")
       ->leftJoin("p.favorites", 'f', 'WITH', 'f.owner = :viewer')
       ->orderBy("p.date_posted", "DESC")
       ->setParameters(array("owner" => $owner, "viewer" => $viewer));

Но поскольку мои сущности трансформируются в json с помощью JMSSerializer, я хотел бы установить результат CASE WHEN как свойство для объекта.

        ->addSelect("CASE WHEN f.photo is NULL THEN false ELSE true END as p.is_favorited")

Но, к счастью, Doctrine, похоже, не нравится:

[Синтаксическая ошибка] строка 0, col 65: Ошибка: Ожидаемая доктрина\ORM\Запрос\Lexer:: T_FROM, полученная..

Есть ли альтернатива настройке созданных свойств DQL для объекта?

4b9b3361

Ответ 1

Невозможно напрямую установить значение свойства в запросе. Вместо этого вы можете добавить не отображаемое поле в объект, а затем пройти через результаты и установить его. В этом случае JMSSerializer сериализуйте это поле, и вы можете установить на нем необходимый тип и другую метаинформацию.

Ответ 2

Можете ли вы попробовать это. он будет работать с DQL

->addSelect("SUM(CASE WHEN f.photo is NULL THEN 0 ELSE 1 END) as p.is_favorited");

Ответ 3

Из-за ошибки это звучит так, как будто она жалуется, потому что у вас нет таблицы FROM, указанной в вашем заявлении select.

Ответ 4

Вам просто нужно добавить

->from() 

которая дает имя таблицы для "F" и