ID、ゲーム (外部キー)、および日付を持つ表 Comment からコメントを取得しようとしています。
コメントを求めるたびに、特定のゲームの日付順に並べ替えられた 3 つのコメントを取得したいと考えており、後で表示するコメントが他にもあるかどうかを知りたいと考えています。そのために、2 つの関数を作成しました。最初の関数は 3 つのコメントを返します。
public function getRecentComments($offset,$id) {
$dql = "SELECT c FROM Comment c
WHERE c.game = ?1
ORDER BY c.date DESC";
$query = $this->getEntityManager()->
createQuery($dql)->
setParameter(1, (int)$id)->
setMaxResults(3)->
setFirstResult($offset);
return $query->getResult();
2 つ目は、後で取得できるコメントの数を返します。この機能の理由は、「コメントをもっと見る」ボタンを表示するかどうかです。これは 2 番目の関数です。
public function moreComments($offset,$id) {
$dql = "SELECT COUNT(c.id) FROM Comment c
WHERE c.game = ?1
ORDER BY c.date DESC";
$query = $this->getEntityManager()
->createQuery($dql)
->setParameter(1, (int)$idPartido)
->setFirstResult($offset+3)
->setMaxResults(1)
->getSingleScalarResult();
return $query;
}
しかし、2 番目の関数は次のエラーでは機能しません。
致命的なエラー: キャッチされない例外 'Doctrine\ORM\NoResultException' とメッセージ 'クエリの結果が見つかりませんでしたが、少なくとも 1 つの行が予期されていました。
setFirstResult と count() を使用するためだと思います。
だから、私は使用しました
public function moreComments($offset,$id) {
$dql = "SELECT c FROM Comentario c
WHERE c.partido = ?1
ORDER BY c.fecha DESC";
$query = $this->getEntityManager()
->createQuery($dql)
->setParameter(1, (int)$idPartido)
->setFirstResult($offset+3)
->setMaxResults(1)
->getSingleScalarResult();
return sizeof($query);
}
カウントだけのデータを取得するべきではないため、これは明らかに悪い書き方です。2番目の関数を正しく書くにはどうすればよいですか?
前もって感謝します。