es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , ,

Answer

  1. Avatar for 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 entidad ItemComunicacao, lo cual es cierto. El campo classificacao es una asociación de muchos a uno con la entidad ClassificacaoComunicacao, y el campo abrir_tarefa es una propiedad de la entidad ClassificacaoComunicacao, no de la entidad ItemComunicacao.

    Para solucionar la consulta, es necesario unir la entidad ClassificacaoComunicacao y hacer referencia a la propiedad abrir_tarefa a través de la unión. Aquí tienes un ejemplo de cómo puedes modificar la consulta:

    $qb = $this->em->createQueryBuilder();
    $qb->select('i.id', 'i.id_alt')
        ->from('App\Entity\ItemComunicacao', 'i')
        ->join('i.classificacao', 'c')
        ->where('i.id_tarefa IS NULL')
        ->andWhere('c.abrir_tarefa = TRUE');
    $array_ids_items = $qb->getQuery()->getArrayResult();
    

    En esta consulta modificada, i.classificacao se une a c utilizando el método join, y c.abrir_tarefa se referencia en la cláusula where.

    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.

Comments are closed.