Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Relaciones en Symfony con querybuilder

19 de julio de 2015

Hola, no entiendo esto. Ya me quemé la cabeza. Tengo dos tablas fichada y user con una relación uno a muchos (un usuario muchas fichadas).

Quiero hacer básicamente esto:

SELECT * FROM fichada p JOIN fos_user c WHERE p.user_id = c.id
AND username LIKE '%n%'ORDER BY p.legajo DESC

Al poner esto en Symfony:

$repository = $this->getDoctrine()->getRepository('AppBundle:Fichada');
$qb = $repository->createQueryBuilder('p');
$qb->Join('p.user','u');
$qb->andWhere('p.user_id=u.id');
$qb->andWhere('p.' . $data["headers"][$row] . ' LIKE :' . $data["headers"][$row])
->setParameter($data["headers"][$row], '%' . $filter[$row] . '%');
$qb->orderBy('p.' . $order1, $criterio)
        ->setFirstResult($offset)
        ->setMaxResults($limit);

Me dice:

p.user_id=u.id Error: Class AppBundle\Entity\Fichada has no field or association named user_id

Que no está definido user_id en la entidad Fichada. Claro por que ese es el campo que crea Symfony para armar la relación en la tabla de la base de datos.

Me cansé de buscar en Google solo necesito poder hacer una consulta y acceder a los campos de ambas tablas no entiendo cómo hacerlo.

Gracias.


Respuestas

#1

Deberías cambiar $qb->andWhere('p.user_id=u.id'); por $qb->andWhere('p.user=u.id');. En Doctrine, que es la librería que se encarga de la base de datos en Symfony, las relaciones se indican directamente mediante los objetos/entidades en vez de con las claves primarias (aunque en la base de datos obviamente sí que se guarda el valor de user_id).

@javiereguiluz

19 julio 2015, 17:37
#2

Maestro sobre los maestros de esta tierra !!! Millón de gracias !!!!!!!!!

@xub

19 julio 2015, 23:47