Saya agak bingung menggunakan model sumber daya dan model koleksi. Terkadang ketika saya melihat contoh untuk memuat produk menggunakan atribut tertentu, dalam beberapa contoh, mereka menggunakan model koleksi dan kadang-kadang mereka menggunakan model sumber daya.
Juga kapan saya bisa menggunakan metode tertentu get...
dan set...
bersama dengan nama baris tabel? Seperti getName
, getId
. Saya mencoba menggunakan tetapi tidak bisa mendapatkan nilai dan itu menunjukkan kesalahan: "memanggil metode yang tidak ditentukan dalam objek"
$product = Mage::getModel('catalog/product')
->loadByAttribute('name', 'product_name');
echo $product->getName();
echo $product->getSku();
Ini menunjukkan "metode tidak terdefinisi getSku()
"
Jika saya menggunakan var_dump($product)
, SKU ditampilkan di objek, namun tidak bisa mendapatkan SKU menggunakan getSku()
...
magento-1.7
collection
product-list
resource-model
MagentoBoy
sumber
sumber
$product
dalam contoh Anda adalah contoh dariMage_Catalog_Model_Product
, yang merupakan "model" dalam bahasa Magento.Jawaban:
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 .
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
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.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 memastikanget
panggilan pada model apa pun akan selalu mengembalikan sesuatu, bahkan jika itu nol.Yang lebih mungkin adalah Anda mendapatkan kesalahan seperti berikut ini
Kesalahan ini terjadi karena
loadByAttribute
metode ini kembalifalse
jika tidak dapat memuat objek.Coba sesuatu seperti ini dalam kode Anda.
Selain persyaratan, perhatikan
getData()
metode ini. Ini akan mengembalikan larik semua data objek sebagai larik.Semoga ini cukup untuk membuat Anda bergerak. Semoga berhasil!
sumber