Khi tôi gọi setMaxResults trên một truy vấn, có vẻ như muốn coi số tối đa là "2", bất kể giá trị thực của nó là gì.
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;
}
Khi tôi nhận xét dòng setMaxResults
, tôi nhận được 6 kết quả. Khi tôi bỏ nó vào, tôi nhận được 2 kết quả gần đây nhất. Khi tôi chạy mã SQL được tạo ra trong phpMyAdmin, tôi nhận được 4 kết quả gần đây nhất. SQL được tạo ra, để tham khảo, là:
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
Sửa:
Trong khi đọc the DQL "Limit" documentation, tôi đi qua như sau:
Nếu truy vấn của bạn chứa một fetch- bộ sưu tập được kết hợp chỉ định các phương thức giới hạn kết quả không hoạt động như bạn mong đợi. Đặt các kết quả tối đa hạn chế số lượng các hàng kết quả cơ sở dữ liệu, tuy nhiên trong trường hợp các bộ sưu tập được tìm nạp, một thực thể gốc có thể xuất hiện trong nhiều hàng, hiệu quả hydrat hóa ít hơn số lượng kết quả đã chỉ định.
Tôi khá chắc chắn rằng tôi không thực hiện bộ sưu tập tìm nạp. Tôi theo ấn tượng rằng một bộ sưu tập được lấy tham gia là nơi tôi làm một cái gì đó như SELECT t, m FROM Threads JOIN t.messages
. Tôi có hiểu lầm về điều này không?
Tôi vừa nhận thấy cùng một vấn đề với học thuyết 2.2. Tôi ngạc nhiên rằng không có cách giải quyết cho điều đó ... – Gregoire