Estou um pouco confuso sobre o uso de modelo de recurso e modelo de coleção. Às vezes, quando vejo exemplos de carregamento de produtos usando atributos específicos, em alguns exemplos, eles usam o modelo de coleção e, às vezes, o modelo de recursos.
Além disso, quando posso usar um método específico get...
e o set...
nome da linha da tabela? Como getName
, getId
. Eu tentei usar, mas não foi possível obter os valores e ele mostra o erro: "chamando método indefinido no objeto"
$product = Mage::getModel('catalog/product')
->loadByAttribute('name', 'product_name');
echo $product->getName();
echo $product->getSku();
Mostra "método indefinido getSku()
"
Se eu usar var_dump($product)
, o SKU é exibido no objeto, mas não é possível obter o SKU usando getSku()
...
magento-1.7
collection
product-list
resource-model
MagentoBoy
fonte
fonte
$product
no seu exemplo é uma instância deMage_Catalog_Model_Product
, que é um "modelo" na linguagem Magento.Respostas:
Os modelos CRUD do Magento têm três tipos básicos de classe.
Um "modelo" é o que você mais usa. Isso representa dados de um tipo específico de uma maneira independente de banco de dados (produto, categoria, página CMS, revisão etc.)
Um "modelo de recursos" é uma classe que, nos bastidores, realiza a busca real de dados do Magento. Todo modelo possui um modelo de recurso usado para carregar uma única instância de um modelo do banco de dados.
Uma "coleção" é uma classe que carrega uma matriz, como a estrutura de vários modelos, com base em um conjunto de regras. Pense nisso como um SQL
WHERE clause
.Confundir um pouco as coisas é que, nos bastidores, o Magento também considera uma coleção um modelo de recursos. Portanto, existem modelos de recursos de coleção e modelos de recursos individuais .
De um modo geral, quando você deseja carregar um item específico, você usa um modelo . Quando você deseja carregar vários itens, você usa um modelo de recurso de coleção .
Um aspecto a ser lembrado sobre o carregamento por meio de um modelo de recurso de coleção é que o
afterLoad
método de cada modelo individual não será chamado automaticamente, o que significa que alguns dados podem não ser carregados.As classes do modelo de recurso individual geralmente não são acessadas diretamente. No entanto, ocasionalmente, um modelo específico terá um modelo de recurso com um método útil. Você descobrirá com o tempo usando o sistema.
Finalmente, há mais uma distinção a ser feita. Os modelos CRUD regulares do Magento têm uma sintaxe especial para carregar através de algo que não é o ID numérico. Por exemplo, veja como carregar um modelo de página do CMS por título
No entanto, alguns modelos Magento são modelos EAV. Isso significa "valor do atributo da entidade" e é uma maneira elegante de dizer que esses modelos não têm um conjunto fixo de campos. Isso inclui modelos de produtos e modelos de categoria. Esse recurso é o que permite escolher diferentes atributos para diferentes tipos de produtos. Cada campo em um modelo EAV é conhecido como um atributo. A sintaxe acima não funcionará com esses modelos; você precisará usar o
loadByAttribute
métodoEm relação ao seu problema específico, se você estiver recebendo um erro com o texto específico "método indefinido", algo está muito errado com seu sistema. Mesmo que o
getSku
método não exista, o Magento possui métodos de setter e getter mágicos que garantem que umaget
chamada em qualquer modelo sempre retorne algo, mesmo que seja nulo.O mais provável é que você esteja recebendo um erro como o seguinte
Este erro está ocorrendo porque o
loadByAttribute
método retornafalse
se não puder carregar o objeto.Tente algo assim no seu código.
Além do condicional, observe o
getData()
método Isso retornará uma matriz de todos os dados do objeto como uma matriz.Espero que isso seja suficiente para você se mexer. Boa sorte!
fonte