Estoy un poco confundido sobre el uso del modelo de recursos y el modelo de colección. A veces, cuando veo ejemplos para cargar productos usando atributos específicos, en algunos ejemplos, usan el modelo de colección y, a veces, usan el modelo de recursos.
Además, ¿cuándo puedo usar un método específico get...
y set...
junto con el nombre de la fila de la tabla? Al igual getName
, getId
. Traté de usar pero no pude obtener los valores y muestra un error: "llamando al método indefinido en el objeto"
$product = Mage::getModel('catalog/product')
->loadByAttribute('name', 'product_name');
echo $product->getName();
echo $product->getSku();
Muestra "método indefinido getSku()
"
Si lo uso var_dump($product)
, SKU se muestra en el objeto, sin embargo, no puedo obtener el SKU usando getSku()
...
magento-1.7
collection
product-list
resource-model
MagentoBoy
fuente
fuente
$product
en su ejemplo es una instancia deMage_Catalog_Model_Product
, que es un "modelo" en el lenguaje de Magento.Respuestas:
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 .
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
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.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 unaget
llamada en cualquier modelo siempre devolverá algo, incluso si es nulo.Lo más probable es que recibas un error como el siguiente
Este error ocurre porque el
loadByAttribute
método regresafalse
si no puede cargar el objeto.Pruebe algo como esto en su código.
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!
fuente