जब मैं किसी क्वेरी पर 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 परिणाम प्राप्त। जब मैं इसे छोड़ देता हूं, तो मुझे 2 सबसे हालिया परिणाम मिलते हैं। जब मैं phpMyAdmin में जेनरेट किए गए SQL कोड चलाता हूं, तो मुझे 4 सबसे हाल के परिणाम मिलते हैं। उत्पन्न एसक्यूएल, संदर्भ के लिए, यह है:
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- शामिल
हैं परिणाम सीमा निर्धारित करने के तरीके में शामिल होने वाले संग्रह में काम नहीं कर रहे हैं जैसा आप उम्मीद करेंगे। मैक्स परिणाम सेट करें डेटाबेस परिणाम पंक्तियों की संख्या को प्रतिबंधित करता है, हालांकि fetch-join संग्रहों के मामले में एक रूट इकाई कई पंक्तियों में दिखाई दे सकती है, जो परिणामों की निर्दिष्ट संख्या से प्रभावी रूप से हाइड्रेटिंग कर सकती है।
मुझे पूरा यकीन है कि मैं एक fetch-join संग्रह नहीं कर रहा हूं। मैं इस धारणा के तहत हूं कि एक fetch-join संग्रह है जहां मैं SELECT t, m FROM Threads JOIN t.messages
जैसा कुछ करता हूं। क्या मैं इसकी समझ में गलत हूं?
मैंने अभी तक सिद्धांत 2.2 के साथ एक ही समस्या देखी है। मुझे आश्चर्य है कि इसके लिए कोई कामकाज नहीं है ... – Gregoire