Model CRUD Magento memiliki tiga tipe kelas dasar.
"Model" adalah yang paling sering Anda gunakan. Ini mewakili data jenis tertentu dengan cara agnostik basis data (produk, kategori, Halaman CMS, Tinjauan, dll.)
"Model sumber daya" adalah kelas yang, di belakang layar, melakukan pengambilan data aktual dari Magento. Setiap model memiliki model sumber daya yang digunakan untuk memuat satu contoh model dari database.
"Koleksi" adalah kelas yang memuat struktur mirip array dari beberapa model berdasarkan seperangkat aturan. Anggap saja seperti SQL WHERE clause
.
Yang agak membingungkan adalah, di balik layar, Magento juga menganggap koleksi sebagai model sumber daya. Jadi ada model sumber daya koleksi dan model sumber daya individu .
Secara umum, ketika Anda ingin memuat item tertentu, Anda menggunakan model . Saat Anda ingin memuat sejumlah item, Anda menggunakan model sumber daya koleksi .
//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());
}
Satu hal yang perlu diingat tentang memuat melalui model sumber daya koleksi adalah metode masing-masing model individu afterLoad
tidak akan dipanggil secara otomatis, yang berarti beberapa data mungkin tidak dimuat.
The model sumber daya individua kelas biasanya tidak diakses secara langsung. Namun, kadang-kadang model tertentu akan memiliki model sumber daya dengan metode yang bermanfaat. Ini Anda akan menemukan dari waktu ke waktu menggunakan sistem.
Akhirnya, ada satu lagi perbedaan yang harus dibuat. Model CRUD reguler Magento memiliki sintaks khusus untuk memuat melalui sesuatu yang bukan ID numerik. Misalnya, berikut ini cara memuat model halaman CMS berdasarkan judul
$page = Mage::getModel('cms/page')->load('Home page','title');
var_dump($page->getData());
Namun, beberapa model Magento adalah model EAV. Itu singkatan dari "nilai atribut entitas", dan merupakan cara yang bagus untuk mengatakan model ini tidak memiliki set bidang yang tetap. Ini termasuk model produk, dan model kategori. Fitur ini memungkinkan Anda memilih atribut yang berbeda untuk berbagai jenis produk. Setiap bidang pada model EAV dikenal sebagai atribut. Sintaks di atas tidak akan berfungsi dengan model-model ini, Anda harus menggunakan loadByAttribute
metode ini.
$product = Mage::getModel('catalog/product')->loadByAttribute('sku', 'n2610');
Mengenai masalah spesifik Anda, jika Anda mendapatkan kesalahan dengan "metode tidak terdefinisi" teks tertentu, maka ada sesuatu yang sangat salah dengan sistem Anda. Bahkan jika getSku
metode ini tidak ada, Magento memiliki metode penyetel dan pengambil sihir yang memastikan get
panggilan pada model apa pun akan selalu mengembalikan sesuatu, bahkan jika itu nol.
Yang lebih mungkin adalah Anda mendapatkan kesalahan seperti berikut ini
Call to a member function getSku() on a non-object
Kesalahan ini terjadi karena loadByAttribute
metode ini kembali false
jika tidak dapat memuat objek.
$product = Mage::getModel('catalog/product')->loadByAttribute('sku', 'this-is-not-a-sku');
var_dump($product); //prints false
Coba sesuatu seperti ini dalam kode Anda.
$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");
}
Selain persyaratan, perhatikan getData()
metode ini. Ini akan mengembalikan larik semua data objek sebagai larik.
Semoga ini cukup untuk membuat Anda bergerak. Semoga berhasil!
$product
dalam contoh Anda adalah contoh dariMage_Catalog_Model_Product
, yang merupakan "model" dalam bahasa Magento.