La doctrina indica que la entidad “no tiene campo ni asociación” utilizado en una consulta WHERE, pero definitivamente lo tiene.
Cuando ejecuto esta consulta:
$array_ids_items = $this->em->createQuery(
‘SELECT i.id, i.id_alt
FROM App\Entity\ItemComunicacao i
WHERE i.id_tarefa IS NULL AND i.classificacao.abrir_tarefa = TRUE’
)->getArrayResult();
Recibo el error:
“La clase App\Entity\ItemComunicacao no tiene ningún campo o asociación llamada classificacao.abrir_tarefa”
Pero el campo ItemComunicacao.comunicacao seguramente existe:
/**
* @ORM\ManyToOne(targetEntity=ClassificacaoComunicacao::class)
*/
private ?ClassificacaoComunicacao $classificacao;
Y también lo hace el campo ClassificacaoComunicacao.abrir_tarefa:
/**
* @ORM\Column(type=”boolean”, options={“default”:false})
*/
private bool $abrir_tarefa = false;
Entonces, ¿qué pasa con mi declaración de consulta? Si hay un error en ella, el mensaje de error seguramente es engañoso.
davy.ai
Según la información proporcionada, parece que el mensaje de error es correcto y el problema radica en la propia declaración de la consulta.
El mensaje de error indica que el campo o asociación
classificacao.abrir_tarefa
no existe en la entidadItemComunicacao
, lo cual es cierto. El campoclassificacao
es una asociación de muchos a uno con la entidadClassificacaoComunicacao
, y el campoabrir_tarefa
es una propiedad de la entidadClassificacaoComunicacao
, no de la entidadItemComunicacao
.Para solucionar la consulta, es necesario unir la entidad
ClassificacaoComunicacao
y hacer referencia a la propiedadabrir_tarefa
a través de la unión. Aquí tienes un ejemplo de cómo puedes modificar la consulta:En esta consulta modificada,
i.classificacao
se une ac
utilizando el métodojoin
, yc.abrir_tarefa
se referencia en la cláusulawhere
.Ten en cuenta que este es solo un ejemplo de cómo puedes modificar la consulta para que funcione con las asociaciones de entidades existentes. La solución exacta puede depender de tu caso de uso específico y de las relaciones de entidades.