Sie haben ein Tutorial erwähnt, das die CRUD-Operation ohne Modell erklärt, aber es ist keine gute Praxis, den Objektmanager zu verwenden.
Lassen Sie mich den Rohbetrieb mit dem Modell erklären, es ist sehr einfach. Dies ist ein sehr wichtiges Konzept in Magento.
Betrachten wir zum Beispiel die folgende Tabellenstruktur
Für den CRUD-Betrieb müssen Sie drei Dinge erstellen
1. Modell
In Modell müssen Sie das Ressourcenmodell initialisieren
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. Ressourcenmodell
Im Ressourcenmodell müssen Sie den Tabellennamen und den Primärschlüssel initialisieren.
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. Sammlung
In der Sammlung müssen Sie Modell und Ressourcenmodell definieren.
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'
);
}
}
Jetzt können Sie mithilfe der Abhängigkeitsinjektion Tabellenwerte in jedem Block abrufen.
Zum Beispiel:
Daten in Block abrufen und festlegen
Bitte beachten Sie, dass wir den <module>\<vendor>\Model\ExampleFactory
Konstruktor übergeben, aber keine der Dateien an diesem Speicherort gefunden wird
In Magento 2 verfügt jedes CRUD-Modell über eine entsprechende Werksklasse. Alle Fabrikklassennamen sind die Namen der Modellklasse, an die das Wort „Fabrik“ angehängt ist. Da unsere Modellklasse benannt ist, <module>/<vendor>/Model/Example
bedeutet dies, dass unsere Fabrikklasse
benannt ist<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
}
}
Danach können Sie diese Blockmethode in Ihrer Vorlagendatei aufrufen
<?php $block->anyMethodYouWant(); ?>