2011-01-26 7 views
12

Bir koleksiyonu attribute_id numarasına ayırmaya çalışıyorum. Bunun kolay olacağını düşündüm, ama sanırım ben doğru kullanmıyorum:Magento'da koleksiyon nasıl sıralanır?

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

Sonucu:

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

Neden herhangi order by yok?

cevap

25

Aslında doğru şekilde yapıyorsunuz. Bununla birlikte, Magento EAV'yi kullandığı için, performansa yardımcı olmak için hileler uygulamak zorundadır.

Bu hilelerden biri, olağan SQL dizesini oluşturmak için kullanılan zamanlamadır. Genellikle son dakikada tembel bir şekilde yüklenir ve koleksiyonun verilerine erişmek istediğiniz SQL'i tam olarak görebilmeniz için aslında bir koleksiyon verisine erişmek istediğinizi belirtmezsiniz. Örneğin kodunuzu çalıştırmak, ancak koleksiyonu oluşturmak ve yüklemek için magento isteminde beklenen çıktıyı üretir.

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

Bu SQL sonuçlanır:

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

Yani sadece Magento seviyesini sizi şaşırtmak için geleni yaptığını, doğru yolda idi. Bu konuda çok iyi.

+0

Açıklama için teşekkürler! Bilmek çok güzel! :) – powtac

+1

'setOrder()' 'desc' düzeninde sonuçlanır. Bunu 'asc' yapmak için herhangi bir yolu var mı? –

+1

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

4

bunu kullanın yerine $attributes->getSelect();:

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

neden sorma.

+0

Magento 1.4.0.0 üzerinde çalışmıyor: Tanınmayan yöntem 'getSelect()' – frinux

+2

@frinux Sorunuz hakkında getSelect() ' – powtac