Kiedy wywołuję funkcję setMaxResults w zapytaniu, wydaje się, że chcesz traktować maksymalną liczbę jako "2", bez względu na to, jaka jest rzeczywista wartość.
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;
}
Kiedy komentuję linię setMaxResults
, otrzymuję 6 wyników. Kiedy go zostawiam, otrzymuję 2 najnowsze wyniki. Kiedy uruchomię wygenerowany kod SQL w phpMyAdmin, otrzymuję 4 najnowsze wyniki. Wygenerowany SQL, dla odniesienia, jest:
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
Edit:
Podczas czytania the DQL "Limit" documentation, natknąłem się na następujący:
Jeśli zapytanie zawiera fetch- dołączył do kolekcji określając metody limitu wyników, które nie działają zgodnie z oczekiwaniami. Ustaw maksymalne wyniki ogranicza liczbę wierszy wyników w bazie danych, jednak w przypadku kolekcjonowania połączonego jedna jednostka główna może pojawić się w wielu wierszach, skutecznie nawadniając mniej niż określona liczba wyników.
Jestem prawie pewien, że nie robię kolekcji połączonej z pobieraniem. Mam wrażenie, że kolekcja połączona z pobieraniem jest tam, gdzie robię coś w stylu: SELECT t, m FROM Threads JOIN t.messages
. Czy jestem w błędzie w moim rozumieniu tego?
Właśnie zauważyłem ten sam problem z doktryną 2.2. Jestem zaskoczony, że nie ma obejścia tego problemu ... – Gregoire