MagentoのCRUDモデルには3つの基本的なクラスタイプがあります。
「モデル」は、最も一般的に使用するものです。これは、データベースにとらわれない方法で特定のタイプのデータを表します(製品、カテゴリ、CMSページ、レビューなど)
「リソースモデル」とは、Magentoから実際にデータを取得するクラスのことです。毎モデルには、データベースからモデルの単一インスタンスをロードするために使用されるリソースモデルがあります。
「コレクション」は、一連のルールに基づいて複数のモデルの構造のような配列をロードするクラスです。SQLのように考えてくださいWHERE clause
。
ややこしいことに、舞台裏では、Magento もコレクションは、リソースモデルであると考えています。そのため、コレクションリソースモデルと個々のリソースモデルがあります。
一般的に、特定のアイテムをロードする場合は、モデルを使用します。多数のアイテムをロードする場合は、コレクションリソースモデルを使用します。
//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());
}
を介してロードする際に留意すべきこと コレクションリソースモデルは、個々のモデルの afterLoad
メソッドが自動的に呼び出されないことです。つまり、一部のデータがロードされない可能性があります。
の individuaリソースモデルクラスは、通常、直接アクセスされていません。ただし、特定のモデルに有用なメソッドを備えたリソースモデルがある場合があります。これらは、システムを使用して時間をかけて発見します。
最後に、もう1つ区別する必要があります。Magentoの通常のCRUDモデルには、数値IDではないものを介して読み込むための特別な構文があります。たとえば、CMSページモデルをタイトルで読み込む方法は次のとおりです。
$page = Mage::getModel('cms/page')->load('Home page','title');
var_dump($page->getData());
ただし、いくつかのMagentoモデルはEAVモデルです。これは「エンティティー属性値」の略で、これらのモデルには固定されたフィールドのセットがないことを示す素晴らしい方法です。これには、製品モデルとカテゴリモデルが含まれます。この機能により、製品の種類ごとに異なる属性を選択できます。EAVモデルの各フィールドは、属性と呼ばれます。上記の構文はこれらのモデルでは機能しません。代わりに、loadByAttribute
メソッド。
$product = Mage::getModel('catalog/product')->loadByAttribute('sku', 'n2610');
特定の問題に関して、特定のテキスト「method undefined」でエラーが発生している場合、システムに何らかの問題があります。getSku
メソッドが存在しない場合でも、Magentoにはマジックセッターおよびゲッターメソッドがあり、get
、モデルの呼び出しがnullであっても常に何かを返すようにします。
より可能性が高いのは、次のようなエラーが発生していることです
Call to a member function getSku() on a non-object
loadByAttribute
メソッドが返すため、このエラーが発生していますfalse
オブジェクトをロードできない場合にています。
$product = Mage::getModel('catalog/product')->loadByAttribute('sku', 'this-is-not-a-sku');
var_dump($product); //prints false
コードで次のようなものを試してください。
$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");
}
条件に加えて、getData()
メソッドに注意してください。これにより、すべてのオブジェクトのデータの配列が配列として返されます。
うまく行けばこれで十分だと思います。がんばろう!
$product
あなたの例では、Mage_Catalog_Model_Product
Magentoの用語では「モデル」であるのインスタンスです。