Exemplo simples do Magento2 de recuperação e exibição de um campo de tabela personalizado?

7

Eu tenho uma tabela personalizada no meu banco de dados Magento2 e não pode encontrar um simples trabalho exemplo de como se conectar, recuperar e exibir os dados de campo em uma página Magento2.

Este funciona principalmente, mas está incompleto porque para na busca do campo, mas não mostra como realmente exibir o campo na página da Web: http://webkul.com/blog/magento2-write-custom-mysql-query-without -using-model /

Alguém pode fornecer um exemplo completo?

mitchellsk
fonte
1
Para Magento 2. Estou usando o gerador CRUD abaixo mage2gen.com
Ankit Shah

Respostas:

23

Você mencionou um tutorial que explica a operação CRUD sem modelo, mas não é uma boa prática usar o gerenciador de objetos.

deixe-me explicar a operação bruta com o modelo, é muito simples. Este é um conceito muito importante no Magento.

Por exemplo, vamos considerar a estrutura da tabela abaixo

insira a descrição da imagem aqui

Para operação CRUD, você precisa criar três coisas

1. Modelo

No Modelo, você precisa inicializar o modelo de recursos

app/code/<vendor>/<module>/Model/Example.php

<?php
namespace <vendor>\<module>\Model;
use Magento\Framework\Model\AbstractModel;
class Example extends AbstractModel
{
    /**
     * Define resource model
     */
    protected function _construct()
    {
    $this->_init('<vendor>\<module>\Model\ResourceModel\Example');
    }
}

2. Modelo de Recursos

No modelo de recursos, você precisa inicializar o nome da tabela e a chave primária.

app/code/<vendor>/<module>/Model/ResourceModel/Example.php

<?php
namespace <vendor>\<module>\Model\Resource;
class Example extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
{
    /**
     * Define main table
     */
    protected function _construct()
    {
    $this->_init('custom_table_name', 'id');   //here id is the primary key of custom table
    }
}

3. Coleta

Na coleção, você precisa definir o Modelo e o Modelo de Recursos.

app/code/<vendor>/<module>/Model/ResourceModel/Example/Collection.php

<?php
namespace <vendor>\<module>\Model\ResourceModel\Example;

class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
{
    /**
     * Define model & resource model
     */
    protected function _construct()
    {
    $this->_init(
        '<vendor>\<module>\Model\Example',
        '<vendor>\<module>\Model\ResourceModel\Example'
    );

    }
}

É isso, agora você pode buscar o valor da tabela em qualquer bloco usando a injeção de dependência.

Por exemplo: obter e definir dados no bloco

Por favor, note que passamos <module>\<vendor>\Model\ExampleFactoryno construtor, mas nenhum arquivo será encontrado nesse local

No Magento 2, cada modelo CRUD possui uma classe de fábrica correspondente. Todos os nomes de classe de fábrica são o nome da classe de modelo anexada com a palavra "Fábrica". Desde que nossa classe de modelo é nomeada, <module>/<vendor>/Model/Exampleisso significa que nossa classe de fábrica é nomeada<module>/<vendor>/Model/ExampleFactory

………………….
………………….

protected $_exampleFactory; 

public function __construct( <vendor>\<module>\Model\ExampleFactory $db)
{
    $this->_exampleFactory = $db;
}
public function anyMethodYouWant()
{
//set value
$this->_exampleFactory->create()->setData(array('event_name' => 'xyz', 'event_imgurl' => 'xyz',...............))->save();

//get value
$data=$this->_exampleFactory->create()->getCollection();
foreach ($data as $d ) 
{
       echo $d->getEventImgurl();   //table field event_imgurl
       echo $d->getEventName();    //table field event_name
}

}

Depois disso, você pode chamar esse método de bloco no seu arquivo de modelo

<?php $block->anyMethodYouWant(); ?>
Bilal Usean
fonte
@Bilal - (onde eu tenho que escrever esse código, quero dizer pls give path) protected $ _exampleFactory; função pública __construct (<fornecedor> / <módulo> / Modelo / ExampleFactory $ db) {$ this -> _ exampleFactory = $ db; } função pública anyMethodYouWant () {$ this -> _ exampleFactory-> create () -> setData (array ('event_name' => 'xyz', 'event_imgurl' => 'xyz', ......... ......)) -> save (); $ data = $ this -> _ exampleFactory-> create () -> getCollection (); foreach ($ dados como $ d) {echo $ d-> getEventImgurl (); echo $ d-> getEventName (); }}
Khushbu_sipl
Bem, explique @BilalUsean. :)
Sanchit Gupta 5/05
Finalmente eu encontrei um simples e fácil explicação para fazer modelos em Magento2
slayerbleast