Quando si chiama setMaxResults su una query, sembra che si desideri trattare il numero massimo come "2", indipendentemente dal valore effettivo.
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;
}
Quando commento la riga setMaxResults
, ottengo 6 risultati. Quando lo lascio, ottengo i 2 risultati più recenti. Quando eseguo il codice SQL generato in phpMyAdmin, ottengo i 4 risultati più recenti. L'SQL generato, per riferimento, è:
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:
Durante la lettura the DQL "Limit" documentation, mi sono imbattuto nel seguente:
Se la query contiene un fetch- la raccolta congiunta che specifica i metodi del limite dei risultati non funziona come ci si aspetterebbe. Imposta risultati massimi limita il numero di righe di risultati del database, tuttavia, nel caso di raccolte fetch-join, un'entità radice potrebbe apparire in più righe, in pratica idratando meno del numero specificato di risultati.
Sono abbastanza sicuro che non sto facendo una collezione di fetch-uniti. Ho l'impressione che una collezione raccolta fetch sia dove faccio qualcosa come SELECT t, m FROM Threads JOIN t.messages
. Sono errato nella mia comprensione di questo?
Ho appena notato lo stesso problema con doctrine 2.2. Sono sorpreso che non ci sia soluzione per questo ... – Gregoire