Ver Mensaje Individual
  #3 (permalink)  
Antiguo 10/05/2016, 00:51
hamramr
 
Fecha de Ingreso: marzo-2007
Mensajes: 59
Antigüedad: 17 años, 1 mes
Puntos: 0
Pregunta Respuesta: Problema Consulta con JOIN

En primer lugar muchas gracias por la ayuda hhs.

Pero no acabo de entenderlo.
A ver si se explicarme.

He modificado el JOIN como decías pero he añadido un "v.id_vehiculos_tipo = vt.id" en el WHERE (si no, no sé cómo decirle qué campos hay que tener en cuenta para la relación).

En MySQL hago esta consulta:
Código:
SELECT v.id, v.matricula, vt.id, vt.descripcion_vehiculo
FROM vehiculos AS v
JOIN vehiculos_tipos AS vt 
WHERE v.id_vehiculos_tipo = vt.id 
AND v.id_usuario = 70845
Y el resultado son dos registros tal que así:
id | matricula | id1 | descripcion_vehiculo
1 | 4467CGH | 1 |Furgoneta
2 | 4468CGI | 3 | Coche

Y luego en Symfony:
Código PHP:
$query $em->createQuery('SELECT partial vt.{id,descripcionVehiculo}, 
                                    partial v.{id,matricula}
                                    FROM IPRestBundle:Vehiculos v 
                                    JOIN IPRestBundle:VehiculosTipos vt                                 
                                    WHERE v.idVehiculosTipo = vt.id AND v.idUsuario = :idUsuario'
)
                            ->
setParameter('idUsuario'$idUsuario);

$datosVehiculosUsuario $query->getResult();

print_r($datosVehiculosUsuario);
exit(); 
Pero el resultado me devuelve 4 resultados, los datos de la tabla/entidad "Vehiculos" por un lado y los de la tabla/entidad "VehiculosTipos" por otro, vamos, por separado, y para luego printarlos es un follón:
Código:
Array
(
    [0] => IP\RestBundle\Entity\Vehiculos Object
        (
            [id:IP\RestBundle\Entity\Vehiculos:private] => 1
            [idUsuario:IP\RestBundle\Entity\Vehiculos:private] => 
            [idVehiculosTipo:IP\RestBundle\Entity\Vehiculos:private] => 
            [matricula:IP\RestBundle\Entity\Vehiculos:private] => 4467CGH
            [seguro:IP\RestBundle\Entity\Vehiculos:private] => 
            [fechaProximaItv:IP\RestBundle\Entity\Vehiculos:private] => 
            [vehiculoPrincipal:IP\RestBundle\Entity\Vehiculos:private] => 
        )

    [1] => IP\RestBundle\Entity\VehiculosTipos Object
        (
            [id:IP\RestBundle\Entity\VehiculosTipos:private] => 1
            [descripcionVehiculo:IP\RestBundle\Entity\VehiculosTipos:private] => Furgoneta
        )

    [2] => IP\RestBundle\Entity\Vehiculos Object
        (
            [id:IP\RestBundle\Entity\Vehiculos:private] => 2
            [idUsuario:IP\RestBundle\Entity\Vehiculos:private] => 
            [idVehiculosTipo:IP\RestBundle\Entity\Vehiculos:private] => 
            [matricula:IP\RestBundle\Entity\Vehiculos:private] => 4468CGI
            [seguro:IP\RestBundle\Entity\Vehiculos:private] => 
            [fechaProximaItv:IP\RestBundle\Entity\Vehiculos:private] => 
            [vehiculoPrincipal:IP\RestBundle\Entity\Vehiculos:private] => 
        )

    [3] => IP\RestBundle\Entity\VehiculosTipos Object
        (
            [id:IP\RestBundle\Entity\VehiculosTipos:private] => 3
            [descripcionVehiculo:IP\RestBundle\Entity\VehiculosTipos:private] => Coche
        )

)
Claro, si yo ahora quiero printar la matrícula y el tipo de vehículo tengo que coger la matrícula del primer resultado y el tipo del segundo, y luego la matrícula del tercer resultado y el tipo del cuarto, y así etcétera (si un usuario tiene una flota de vehículos pues la cosa se complica).

Lo que no entiendo es cómo en una consulta normal de MySQL se obtienen dos resultados que juntan los campos de las dos tablas en un registro y con Symfony/Doctrine no está pasando.

Muy posiblemente sea porque hay algo que no estoy haciendo bien o que desconozco.

Muchas gracias por la ayuda.

Un cordial saludo.