我試圖從表中檢索評論有ID,遊戲(外鍵)和日期的評論。在學說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();
,第二個返回後,我能獲得的評論數。這個功能的原因是我們還會顯示一個按鈕「更多評論」或沒有。這是第二個功能:
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;
}
但第二個功能不會在接下來的工作錯誤:
致命錯誤:未捕獲的異常「學說\ ORM \ NoResultException」有消息「沒有結果發現儘管至少有一行是預期的。
我認爲這是由於使用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);
}
這顯然是爛筆頭,因爲我不應該得到的數據只是一個計數。我怎樣才能正確地編寫第二個函數?
在此先感謝。
我真的很感謝你的回答。這對我幫助很大。不過,我很快就會使用postgresql。 – honnix 2012-07-14 21:37:48
我認爲你可以使用你現有的第二個查詢,但用'getScalarResult()'替換'getSingleScalarResult()'。或者在try/catch塊中包裝你的第二個查詢來捕獲異常;如果拋出異常,那麼你知道沒有更多的註釋。 – rexmac 2012-07-14 22:34:29