Los modelos CRUD de Magento tienen tres tipos de clase básicos.
Un "modelo" es lo que usará más comúnmente. Esto representa datos de un tipo particular en una forma independiente de la base de datos (producto, categoría, página CMS, revisión, etc.)
Un "modelo de recursos" es una clase que, detrás de escena, realiza la obtención real de datos de Magento. Cada modelo tiene un modelo de recurso que se usa para cargar una sola instancia de un modelo desde la base de datos.
Una "colección" es una clase que carga una estructura tipo matriz de múltiples modelos basados en un conjunto de reglas. Piense en ello como un SQL WHERE clause
.
Un poco confuso es que, detrás de escena, Magento también considera que una colección es un modelo de recursos. Así que hay modelos de recursos de colección y modelos de recursos individuales .
En términos generales, cuando desea cargar un artículo específico, utiliza un modelo . Cuando desea cargar una cantidad de elementos, utiliza un modelo de recurso de recopilación .
//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());
}
Una cosa a tener en cuenta sobre la carga a través de un modelo de recurso de recopilación es que el afterLoad
método de cada modelo individual no se llamará automáticamente, lo que significa que algunos datos pueden no cargarse.
Los modelos de recursos individua clases por lo general no se puede acceder directamente. Sin embargo, ocasionalmente un modelo específico tendrá un modelo de recurso con un método útil. Estos los descubrirá con el tiempo utilizando el sistema.
Finalmente, hay una distinción más que hacer. Los modelos CRUD regulares de Magento tienen una sintaxis especial para cargar a través de algo que no es la identificación numérica. Por ejemplo, aquí se explica cómo cargar un modelo de página CMS por título
$page = Mage::getModel('cms/page')->load('Home page','title');
var_dump($page->getData());
Sin embargo, algunos modelos de Magento son modelos EAV. Eso significa "valor de atributo de entidad", y es una forma elegante de decir que estos modelos no tienen un conjunto fijo de campos. Esto incluye modelos de productos y modelos de categoría. Esta característica es lo que le permite elegir diferentes atributos para diferentes tipos de productos. Cada campo en un modelo EAV se conoce como un atributo. La sintaxis anterior no funcionará con estos modelos, sino que debe usar el loadByAttribute
método.
$product = Mage::getModel('catalog/product')->loadByAttribute('sku', 'n2610');
Con respecto a su problema específico, si obtiene un error con el texto específico "método indefinido", entonces algo está muy mal en su sistema. Incluso si el getSku
método no existe, Magento tiene métodos mágicos de establecimiento y obtención que aseguran que una get
llamada en cualquier modelo siempre devolverá algo, incluso si es nulo.
Lo más probable es que recibas un error como el siguiente
Call to a member function getSku() on a non-object
Este error ocurre porque el loadByAttribute
método regresa false
si no puede cargar el objeto.
$product = Mage::getModel('catalog/product')->loadByAttribute('sku', 'this-is-not-a-sku');
var_dump($product); //prints false
Pruebe algo como esto en su código.
$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");
}
Además del condicional, observe el getData()
método. Esto devolverá una matriz de todos los datos del objeto como una matriz.
Esperemos que esto sea suficiente para que te muevas. ¡Buena suerte!
$product
en su ejemplo es una instancia deMage_Catalog_Model_Product
, que es un "modelo" en el lenguaje de Magento.