2011-01-26 36 views
12

Tôi đang cố gắng sắp xếp bộ sưu tập theo attribute_id. Tôi nghĩ rằng nó sẽ được dễ dàng, nhưng tôi nghĩ rằng tôi không sử dụng nó một cách chính xác:Cách sắp xếp bộ sưu tập trong Magento?

$attributes = Mage::getResourceModel('eav/entity_attribute_collection') 
    ->setOrder('attribute_id'); 
echo $attributes->getSelect(); 

Kết quả:

SELECT `main_table`.* FROM `eav_attribute` AS `main_table` 

Tại sao không có bất kỳ order by?

Trả lời

25

Bạn đang thực sự làm đúng cách. Tuy nhiên, kể từ khi Magento sử dụng EAV, nó cần phải áp dụng các thủ thuật để giúp thực hiện.

Một trong những thủ thuật này là thời gian được sử dụng để xây dựng chuỗi SQL cuối cùng. Thông thường nó được tải nhẹ nhàng vào phút cuối và nó không phải cho đến khi bạn thực sự chỉ ra bạn muốn truy cập dữ liệu của một bộ sưu tập, rằng bạn có thể thấy toàn bộ SQL được sử dụng để tạo ra bộ sưu tập. Ví dụ chạy mã của bạn, nhưng nhắc Magento thực sự xây dựng và tải bộ sưu tập, tạo ra kết quả mong đợi.

$attributes = Mage::getResourceModel('eav/entity_attribute_collection') 
    ->setOrder('attribute_id'); 
$attributes->count(); // forces the collection to load 
echo $attributes->getSelect()->assemble(); 

Điều này dẫn đến SQL:

SELECT `main_table`.* FROM `eav_attribute` AS `main_table` ORDER BY attribute_id DESC 

Vì vậy, bạn đang trên con đường đúng đắn, chỉ Magento đang làm mức độ của nó tốt nhất để gây nhầm lẫn bạn. Nó rất tốt ở đó.

+0

Cảm ơn bạn đã giải thích! Rất tốt để biết! :) – powtac

+1

kết quả 'setOrder()' trong thứ tự 'desc'. Có cách nào để làm cho nó 'asc'? –

+1

-> setOrder ('attribute_id', 'asc'); –

4

Sử dụng này thay vì $attributes->getSelect();:

$attributes->getSelect()->order('main_table.attribute_id ASC'); 

Đừng hỏi tại sao.

+0

Không hoạt động trên Magento 1.4.0.0: Phương thức không được nhận dạng 'getSelect()' – frinux

+2

@frinux Câu hỏi của bạn là về 'getSelect()' – powtac

Các vấn đề liên quan