Сохранение состояния "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 для объекта?
Ответы
Ответ 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" и