count
veya Koleksiyonlarınızdan kaçınmalısınız.
Mage_Core_Model_Resource_Db_Collection_Abstract
(hemen hemen tüm Magento Koleksiyonları tarafından devralınan Koleksiyon Modeli) bu yüzden büyük olasılıkla çok kötü seçenektir Varien_Data_Collection::count()
ile bitireceğiz senin Koleksiyonu üzerinde count
kullanarak, count()
tanımlı yok bunun beri, İşte nedenleri: bir koleksiyon load()
yapar ve daha sonra yüklenen nesneleri sayar:
/**
* Retireve count of collection loaded items
*
* @return int
*/
public function count()
{
$this->load();
return count($this->_items);
}
senin Koleksiyon verilerinin TÜM yükleme sonucu yapacak geniş bir koleksiyona (özellikle EAV toplama) Having - Bu çok zaman alabilir. , Buna ek olarak
/**
* Get collection size
*
* @return int
*/
public function getSize()
{
if (is_null($this->_totalRecords)) {
$sql = $this->getSelectCountSql();
$this->_totalRecords = $this->getConnection()->fetchOne($sql, $this->_bindParams);
}
return intval($this->_totalRecords);
}
load
sonra:
Bunun yerine sadece, çok daha Koleksiyon yükü için her türlü bilgiyi almak kıyasla optimize saymak almak için SQL sorgusu çalışacaktır Varien_Data_Collection_Db::getSize()
yöntemi kullanmalıdır Koleksiyon hiçbir şekilde değiştirilemez. Örneğin, count()
kullandıktan sonra herhangi bir noktada değişiklik sıralama düzenine ait ek filtreler uygulayamazsınız.
Yani doğru yanıt olmalıdır: koleksiyonunda basit, standart bir PHP count()
Running
$collection = Mage::getModel('zzz/zzz')->getCollection();
var_dump($collection->getSize());
Bu çok detaylı cevap için teşekkürler! Kabul edilmiş ! – Shadowbob
Gerçekten bu cevabı işaretlemek istiyorum. ya da benim gibi değerli cevabı bu şekilde tutabileceğim profilime ekle. –