當我在查詢上調用setMaxResults時,它似乎想將最大數字視爲「2」,無論它的實際值是多少。
function findMostRecentByOwnerUser(\Entities\User $user, $limit)
{
echo "2: $limit<br>";
$query = $this->getEntityManager()->createQuery('
SELECT t
FROM Entities\Thread t
JOIN t.messages m
JOIN t.group g
WHERE
g.ownerUser = :owner_user
ORDER BY m.timestamp DESC
');
$query->setParameter("owner_user", $user);
$query->setMaxResults(4);
echo $query->getSQL()."<br>";
$results = $query->getResult();
echo "3: ".count($results);
return $results;
}
當我註釋掉setMaxResults
這一行時,我得到了6個結果。當我離開時,我得到了最近的兩個結果。當我在phpMyAdmin中運行生成的SQL代碼時,我得到了4個最新的結果。生成的SQL,以供參考,是:
SELECT <lots of columns, all from t0_>
FROM Thread t0_
INNER JOIN Message m1_ ON t0_.id = m1_.thread_id
INNER JOIN Groups g2_ ON t0_.group_id = g2_.id
WHERE g2_.ownerUser_id = ?
ORDER BY m1_.timestamp DESC
LIMIT 4
編輯:
在閱讀the DQL "Limit" documentation,我碰上了以下內容:
如果查詢包含一個fetch-加入集合,指定結果限制方法不像您期望的那樣工作。設置最大結果數限制了數據庫結果行的數量,但是在獲取連接集合的情況下,一個根實體可能出現在許多行中,從而有效地保證少於指定數量的結果。
我敢肯定,我沒有做一個獲取 - 加入收藏。我的印象是,加入了一個獲取加入的集合是我做類似SELECT t, m FROM Threads JOIN t.messages
的地方。我的理解是否不正確?
我剛剛注意到與教條2.2相同的問題。我很驚訝,有沒有解決方法... – Gregoire