2012-08-30 7 views
40

をオフセット:使用制限と私は改ページをやろうとしているが、エラーがあるDoctrine2クエリで

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

私はこれは正しい構文(およびロジック)であればかなりわからないんだけど作るために私のクエリ:

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(); 
} 

友人やユーザーが関連しているmanyToOneとoneToMany、友人のテーブルのように、してフィールドがあります - USER_ID。

これは私のコントローラである:

$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); 

私は(特に第三のパラメータは$page*$FR_PER_PAGEされるように)、それは愚かなとさえ間違っていることを知っているが、私はちょうどクエリが動作するかどうか試してみたかった、そしてそれはdidnのt。

+0

あなたはそれが動作しませんでした何を意味するのですか?何かエラーがありますか? DQLに直接挿入するのではなく、 'setParameter(" user "、$ user)'を使うべきです。また、あなたのエンティティ定義を見ることはいいでしょう。編集:ちょうど編集を見た。 「オフセット」にスペースが追加されている必要があります – Flukey

+0

はい、エラーが表示されます。質問の先頭にあります。 – Faery

+0

このバンドルはあなたにとって興味深いかもしれません:http://knpbundles.com/KnpLabs/KnpPaginatorBundle – Flukey

答えて

96

いいえ。用途:

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

しかし、結果の開始場所を設定するにはどうすればよいですか? – Faery

+0

私の答えが更新されました! –

+0

完璧!どうもありがとうございました! – Faery

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

findBy()関数を使用したかったので、これはより便利でした – Christian

1

あなたにも使用することができます

$ query->は、getSingleResult();

関連する問題