Einfaches Magento2-Beispiel zum Abrufen und Anzeigen eines benutzerdefinierten Tabellenfelds?

7

Ich habe eine benutzerdefinierte Tabelle in meiner Magento2-Datenbank und kann kein einfaches Arbeitsbeispiel zum Verbinden, Abrufen und Anzeigen der Felddaten auf einer Magento2-Seite finden.

Dieser funktioniert meistens, ist jedoch unvollständig, da er beim Abrufen des Felds aufhört, aber nicht zeigt, wie das Feld tatsächlich auf der Webseite angezeigt wird: http://webkul.com/blog/magento2-write-custom-mysql-query-without -Verwenden von Modell /

Kann jemand bitte ein vollständiges Beispiel geben?

Mitchellsk
quelle
1
Für Magento 2. Ich benutze unten CRUD Generator mage2gen.com
Ankit Shah

Antworten:

23

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

Geben Sie hier die Bildbeschreibung ein

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\ExampleFactoryKonstruktor ü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/Examplebedeutet 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(); ?>
Bilal Usean
quelle
@Bilal - (wo ich diesen Code schreiben muss, meine ich, bitte geben Sie den Pfad an) protected $ _exampleFactory; öffentliche Funktion __construct (<Anbieter> / <Modul> / Model / ExampleFactory $ db) {$ this -> _ exampleFactory = $ db; } public function anyMethodYouWant () {$ this -> _ exampleFactory-> create () -> setData (array ('event_name' => 'xyz', 'event_imgurl' => 'xyz', ......... ......)) -> save (); $ data = $ this -> _ exampleFactory-> create () -> getCollection (); foreach ($ data als $ d) {echo $ d-> getEventImgurl (); echo $ d-> getEventName (); }}
Khushbu_sipl
Erklären Sie @BilalUsean. :)
Sanchit Gupta
Schließlich fand ich eine einfache Erklärung für das Erstellen von Modellen auf Magento2
Slayerbleast