
Duda con consulta en symfony 5
Publicado por Reinier (2 intervenciones) el 28/07/2021 02:36:33
Saludos a todos, primero que nada, soy nuevo por aca y soy aprendiz de symfony para ello me he propuesto crear una aplicación web en symfony 5.18 la cual me ha servido como estudio, pero ahora me he tenido que enfrentar a una consulta un poco compleja. Les cuento: Tengo tres entidades que se relacionan entre ellas; Juego, criterio, usuario. Un juego puede tener varios criterios, y un criterio solo puede tener un juego. Cada criterio es emitido por un usuario. Por lo tanto, tengo definidas las siguientes relaciones en los modelos: Juego:
Criterio:
Usuario:
Mi problema consiste en que tengo que hacer dos consultas que no me funcionan correctamente; necesito saber cuáles son los juegos en los cuales el usuario logueado no ha emitido un criterio, para ello he creado la siguiente consulta en el repositorio de juegos:
Esto me devuelve todos los juegos, en cambio si quito la línea: OR c.usuario != :user
Me devuelve los juegos que no tienen ningún criterio, y lo cual sería correcto, y si la modifico asi:
Me devuelve los juegos que no tienen criterios, más los que el usuario logeado ya le ha emitido el criterio. No logro comprender porque no me funciona la consulta original. Si alguien pudiera arrojarme un poco de luz estaría agradecido.
DATOS DE EJEMPLO:
Usuarios:(total 2)
Pedro (Usuario logeado).
Juan
Criterios:(total 4)
Rust Legacy / Pedro
Rust Legacy / Juan
Hurtworld / Juan
Stalker / Pedro
Juegos:(Total 6)
Rust Legacy
Hurtworld
GTA
Call of Dutty
rainbow Six
Stalker
Resultado de la consulta:(total 5)
Rust Legacy.
Hurtworld.
GTA.
Call of Dutty.
rainbow Six.
1
2
3
4
/**
* @ORM\OneToMany(targetEntity=Criterio::class, mappedBy="juego", orphanRemoval=true)
*/
private $criterios;
Criterio:
1
2
3
4
5
6
7
8
9
10
/**
* @ORM\ManyToOne(targetEntity=Juego::class, inversedBy="criterios")
* @ORM\JoinColumn(nullable=false)
*/
private $juego;
/**
* @ORM\ManyToOne(targetEntity=Usuario::class, inversedBy="criterios")
* @ORM\JoinColumn(nullable=false)
*/
private $usuario;
Usuario:
1
2
3
4
/**
* @ORM\OneToMany(targetEntity=Criterio::class, mappedBy="usuario", orphanRemoval=true)
*/
private $criterios;
Mi problema consiste en que tengo que hacer dos consultas que no me funcionan correctamente; necesito saber cuáles son los juegos en los cuales el usuario logueado no ha emitido un criterio, para ello he creado la siguiente consulta en el repositorio de juegos:
1
2
3
4
5
6
7
8
9
10
11
12
public function findPendingGamesByUser($user)
{
return $this->getEntityManager()
->createQuery("
SELECT j, c From App:Juego j
LEFT JOIN j.criterios c
WHERE c IS NULL
OR c.usuario != :user
")
->setParameter('user', $user)
;
}
Esto me devuelve todos los juegos, en cambio si quito la línea: OR c.usuario != :user
Me devuelve los juegos que no tienen ningún criterio, y lo cual sería correcto, y si la modifico asi:
1
OR c.usuario == :user
Me devuelve los juegos que no tienen criterios, más los que el usuario logeado ya le ha emitido el criterio. No logro comprender porque no me funciona la consulta original. Si alguien pudiera arrojarme un poco de luz estaría agradecido.
DATOS DE EJEMPLO:
Usuarios:(total 2)
Pedro (Usuario logeado).
Juan
Criterios:(total 4)
Rust Legacy / Pedro
Rust Legacy / Juan
Hurtworld / Juan
Stalker / Pedro
Juegos:(Total 6)
Rust Legacy
Hurtworld
GTA
Call of Dutty
rainbow Six
Stalker
Resultado de la consulta:(total 5)
Rust Legacy.
Hurtworld.
GTA.
Call of Dutty.
rainbow Six.
Valora esta pregunta


0