2012-08-30 29 views
40

que estoy tratando de hacer la paginación, pero hay un error:Límite de uso y Offset en la consulta Doctrine2

[Syntax Error] line 0, col 57: Error: Expected end of string, got 'limit'

No estoy seguro si esto es la sintaxis correcta (y la lógica) para hacer mi consulta:

ManyToOne
public function getFriendsFromTo ($user, $limit, $offset) 
{ 
    return $this->getEntityManager() 
     ->createQuery('SELECT f FROM EMMyFriendsBundle:Friend f WHERE f.user='.$user.' limit '.$limit. 'offset' .$offset) 
     ->getResult(); 
} 

amigos y usuarios están relacionados y OneToMany, por lo que en la mesa de amigos hay un campo - user_id.

Esto está en mi controlador:

$user = $this->get('security.context')->getToken()->getUser(); 
$id = $user->getId(); 

$friends = $user->getFriends(); 
$result = count($friends) 
$FR_PER_PAGE = 7; 
$pages = $result/$FR_PER_PAGE; 

$em = $this->getDoctrine()->getEntityManager(); 
$friends = $em->getRepository('EMMyFriendsBundle:Friend') 
     ->getFriendsFromTo($id, $FR_PER_PAGE, $page*$FR_PER_PAGE); 

Sé que es estúpido e incluso mal (especialmente el tercer parámetro a ser $page*$FR_PER_PAGE), pero yo sólo quería probar si la consulta funciona, y didn' t.

+0

¿Qué quería decir que no funcionó? obtener algún error? También debería usar 'setParameter (" usuario ", $ usuario)' en lugar de insertarlo directamente en el DQL. Además, sería bueno ver las definiciones de su entidad. EDITAR: acaba de ver la edición. Debería haber un espacio adjunto para 'compensar' – Flukey

+0

Sí, me sale un error; está en el comienzo de la pregunta. – Faery

+0

Este paquete puede ser de su interés: http://knpbundles.com/KnpLabs/KnpPaginatorBundle – Flukey

Respuesta

96

Nope. Uso:

return $this->getEntityManager() 
     ->createQuery('...') 
     ->setMaxResults(5) 
     ->setFirstResult(10) 
     ->getResult(); 
+0

¿Pero cómo establecer desde dónde deberían comenzar los resultados? – Faery

+0

¡He actualizado mi respuesta! –

+0

¡Perfecto! ¡Muchas gracias! – Faery

27
$towary = $this->getDoctrine() 
    ->getRepository('AcmeStoreBundle:Towar') 
    ->findBy(array(),array(),10,($current-1)*$numItemsPerPage); 
+0

Lo encontré más útil porque quería usar la función findBy() – Christian

1

también se puede utilizar

$ query-> getSingleResult();

Cuestiones relacionadas