migrations create php mysql symfony doctrine-orm

php - create - symfony database config



Almacenamiento de la condiciĆ³n "CASO CUANDO" en la entidad Doctrine2 (4)

¿Puedes probar esto? funcionará con DQL

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

A partir de Doctrine 2.1, la instrucción CASE WHEN es compatible pero no hay mucha documentación sobre ella. Mi objetivo es establecer un valor booleano para indicar si una foto ha sido favorecida por un usuario:

->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));

Pero como mis entidades se están transformando en json por JMSSerializer, me gustaría establecer el resultado CASE WHEN como una propiedad de la entidad.

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

Pero, afortunadamente, a Doctrina no parece gustarle esto:

[Error de sintaxis] línea 0, columna 65: Error: Se esperaba Doctrine / ORM / Query / Lexer :: T_FROM, ''.''

¿Existe una alternativa a la configuración de propiedades DQL creadas en una entidad?


No hay manera de establecer el valor de la propiedad en la consulta directamente. En su lugar, puede agregar un campo no asignado a la entidad, y luego recorrer los resultados y configurarlo. En este caso, JMSSerializer serializa ese campo y puede configurar el tipo necesario y otra metainformación en él.


Por el error, parece que se está quejando porque no tiene una tabla FROM en su declaración seleccionada.


Solo necesitas añadir tu

->from()

línea que da el nombre de la tabla para "F" y