1

この DQL を使用してデータを取得しますが、doctrine2 paginator を使用するとエラーが発生します。

SELECT f FROM DankeForumBundle:Forumusermessage f
  WHERE f.recipientdelete=0
  GROUP BY f.forwarder
  HAVING f.recipient=:recipient

これは、doctrine がこのクエリを実行してページをカウントするためです。

SELECT count(DISTINCT f.id) FROM Forumusermessage AS f
  WHERE f.recipientdelete=0
  GROUP BY f.forwarder_id
  HAVING f.recipient_id=:recipient

ネイティブ SQL クエリを使用せずにこれをページ分割する方法はありますか?

編集:

これは PHP コードの例です。

$query = $this->getEntityManager()->createQuery('SELECT f FROM DankeForumBundle:Forumusermessage f
  WHERE f.recipientdelete=0
  GROUP BY f.forwarder
  HAVING f.recipient=:recipient');
$query->setParameter('recipient', $user);
$query->setFirstResult(0);
$query->setMaxResults(10);
$paginator = new \Doctrine\ORM\Tools\Pagination\Paginator($query);
echo count($paginator); // wrong page count
4

1 に答える 1

0

サブクエリを使用して回避策を見つけました:

SELECT f FROM DankeForumBundle:Forumusermessage f
WHERE
  f.recipientdelete=0 AND
  f.recipient=:recipient
  AND f.id IN (
    SELECT fn FROM DankeForumBundle:Forumusermessage fn
    GROUP BY fn.forwarder
  )
于 2012-11-18T14:14:39.683 に答える