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
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\ExampleFactory
no 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/Example
isso 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(); ?>