Magento'nun CRUD modelleri üç temel sınıf tipine sahiptir.
Bir "model", en sık kullanacağınız şeydir. Bu, veritabanı agnostik yolla belirli bir türdeki verileri temsil eder (ürün, kategori, CMS Sayfası, İnceleme, vb.)
Bir "kaynak modeli", sahne arkasında Magento'dan gerçek veri alımını yapan bir sınıftır. Her modelin bir sahiptir kaynak modelini bir tek bir örneğini yüklemek için kullanılır modeli veritabanından.
Bir "koleksiyon", bir dizi kurala dayanarak çoklu modellerin bir dizi benzeri yapısını yükleyen bir sınıftır. Bir SQL gibi düşünün WHERE clause
.
Olayları bir şekilde karıştıran, sahne arkasındaki Magento, aynı zamanda bir kaynak model olarak bir koleksiyon olarak görüyor. Yani toplama kaynak modelleri ve bireysel kaynak modelleri var .
Genel olarak, belirli bir öğeyi yüklemek istediğinizde bir model kullanırsınız . Çok sayıda öğe yüklemek istediğinizde, bir koleksiyon kaynak modeli kullanırsınız .
//loads one
$product = Mage::getModel('catalog/product')->load($id);
//loads many products where price is greater than 100
$products = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*') //load all fields, see EAV below
->addAttributeToFilter('price', array('gt'=>'100'));
foreach($products as $product)
{
var_dump($product->getSku());
}
Koleksiyon kaynak modeliyle yükleme hakkında akılda tutulması gereken bir nokta, her bir modelin afterLoad
yönteminin otomatik olarak çağrılmaması, yani bazı verilerin yüklenemeyeceği anlamına gelir.
Individua kaynak modeli sınıfları genellikle doğrudan erişilebilir değildir. Ancak, zaman zaman belirli bir model üzerinde faydalı bir yöntemle bir kaynak modeline sahip olacaktır. Bunlar sistemi kullanarak zaman içinde keşfedeceksiniz.
Son olarak, yapılacak bir ayrım daha var. Magento'nun normal CRUD modelleri, sayısal kimliği olmayan bir şey üzerinden yüklemek için özel bir sözdizimine sahiptir. Örneğin, CMS sayfa modelini başlığa göre nasıl yükleyeceğiniz
$page = Mage::getModel('cms/page')->load('Home page','title');
var_dump($page->getData());
Ancak, birkaç Magento modeli EAV modelleridir. Bu "varlık niteliği değeri" anlamına gelir ve bu modellerin sabit bir alan kümesi olmadığını söylemenin süslü bir yoludur. Buna ürün modelleri ve kategori modelleri de dahildir. Bu özellik, farklı ürün türleri için farklı özellikler seçmenize izin veren şeydir. Bir EAV modelindeki her alan bir özellik olarak bilinir. Yukarıdaki sözdizimi bu modellerle çalışmaz, bunun yerine loadByAttribute
yöntemi kullanmanız gerekir .
$product = Mage::getModel('catalog/product')->loadByAttribute('sku', 'n2610');
Özel probleminizle ilgili olarak, "method undefined" metoduyla ilgili bir hata mesajı alıyorsanız, sisteminizde bir sorun var demektir. getSku
Metot olmasa bile , Magento sihirli ayarlayıcıya ve get
herhangi bir modelde bir çağrının boş olsa bile her zaman bir şey döndürmesini sağlayan alıcı metodlarına sahiptir .
Daha olası olan, aşağıdaki gibi bir hatayla karşılaşıyor olmanızdır.
Call to a member function getSku() on a non-object
Bu hata, nesne yüklenemiyorsa loadByAttribute
yöntem geri döndüğü için oluyor false
.
$product = Mage::getModel('catalog/product')->loadByAttribute('sku', 'this-is-not-a-sku');
var_dump($product); //prints false
Kodunuzda böyle bir şey deneyin.
$product = Mage::getModel('catalog/product')->loadByAttribute('sku', 'sku-value');
if($product)
{
var_dump($product->getName());
var_dump($product->getSku());
var_dump($product->getData());
}
else
{
var_dump("Could not load product");
}
Koşullu ek olarak, getData()
metoda dikkat edin . Bu, tüm nesnenin verilerinin bir dizisini bir dizi olarak döndürür.
Umarım bu sizi harekete geçirmek için yeterlidir. İyi şanslar!
$product
gerekirse - örneğinizde,Mage_Catalog_Model_Product
Magento parlance'da bir "model" olan bir örnektir .