そこで、dojox.grid.DataGrid のストアとして使用するdojo.store.jsonRestのページングを実装しました。サーバーでSymfony 2を使用し、ORM Doctrineとして、この 2 つのフレームワークは初めてです。
Dojo jsonRest の場合、サーバーの応答には、結果のオフセット、制限、およびレコードの総数 (制限なし)を含むヘッダーContent-Rangeが含まれている必要があります。
したがって、Content-Range: items 0-24/66ヘッダーを含む応答の場合、ユーザーがグリッド レコードを24 行までスクロールする場合、 Range: 24-66ヘッダーを使用して非同期要求を作成し、次に応答ヘッダーを使用します。 Content-Range: items 24-66/66が必要です。これは、Dojo が、ページ分割されたデータに対して作成できる要求の数と、提示された要求と後続の要求のレコード範囲を知ることができるようにするために行われます。
したがって、私の問題は、制限なしでレコードの総数を取得するには、オフセットと制限を持つ同じクエリを使用してCOUNTクエリを作成する必要があったことです。私はこれが好きではありません。
2 つのクエリを実行せずに合計数と限定された結果を取得できる方法があるかどうかを知りたいです。
public function getByTextCount($text)
{
$dql = "SELECT COUNT(s.id) FROM Bundle:Something s WHERE s.text LIKE :text";
$query = $this->getEntityManager()->createQuery($dql);
$query->setParameter('text', '%'.$text.'%');
return $query->getSingleScalarResult();
}
-
public function getByText($text, $offset=0, $limit=24)
{
$dql = "SELECT r FROM Bundle:Something s WHERE s.text LIKE :text";
$query = $this->getEntityManager()->createQuery($dql);
$query->setParameter('text', '%'.$text.'%');
$query->setFirstResult($offset);
$query->setMaxResults($limit);
return $query->getArrayResult();
}