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
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
Maestro sobre los maestros de esta tierra !!! Millón de gracias !!!!!!!!!
@xub