Seguici su:

Magento 2 Entity Modello Semplice

Magento 2 Data Store EAV

Magento 2 Entity Modello Semplice

Creare un Simple Model con Magento 2

Diversamente al Model Entity EAV, creare un modello semplice in magento 2 è molto più facile, dato che i dati, come detto nel precedente articolo sono memorizzati orizzontalmente nel database. Come sempre useremo la struttura del progetto che abbiamo creato in questo articolo Creare un semplice modulo con Magento

Quindi dobbiamo creare le seguenti classi:

  • model (AbstractModel)
  • resource model (AbstractDb )
  • collection (AbstractCollection)

per una entità che chiameremo Simple.

Model

<?php
namespace Tutoria4dev\Easy\Model;

class Simple extends \Magento\Framework\Model\AbstractModel
{
    // Convenzione Magento <ModuleName>_<ModelName>
    // Convenzione suggerita <VendoName><ModuleName>_<ModelName>
    protected $_eventPrefix ='tutorial4dev_easy_simple';
    
    // Convenzione Magento <ModelName>
    protected $_eventObject = 'simple';

    protected function _construct()
    {
        $this->_init(\Tutorial4dev\Easy\Model\ResourceModel\Log::class);
    }
}

La convenzione di magento ci dice di utilizzare per $_eventPrefix il nome del modulo e il nome del modello, ma è molto più sicuro utilizzare anche il nome del produttore per non incorrere a nomi di tabelle uguali. Nella classe model dichiariamo semplicemente le due variabili con le convenzioni sopra citate e dichiariamo il costruttore della classe chiamando il metodo _init  e passandogli il ResourceModel . I campi dichiarati sopra non sono obbligatori ma è raccomandato  dichiararli per poter estendere il modulo in futuro.

ResourceModel

<?php

namespace \Tutorial4dev\Easy\Model\ResourceModel;

class Simple extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
{
    protected function _construct()
    {
        // Convenzione per il nome della tabella
        // Convenzione dell'id per il nome della colonna
        $this->_init('tutorial4dev_easy_simple','entity_id');
    }
}

Nella classe ResourceModel chiamiamo il metodo _init che prende in input due argomenti: il nome della tabella e il nome del campo id. da Notare che queste istruzioni non creano la tabella nel database.

Collection

<?php

namespace Tutorial4dev\Easy\Model\ResourceModel\Simple;

class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
{
    protected function _construct()
    {
        $this->_init(
            \Tutorial4dev\Easy\Model\Simple::class,
            \Tutorial4dev\Easy\Model\ResouceModel\Simple::class
        );
    }
}

Infine creiamo la classe Collection, dichiariamo il metodo _init che prende in input due parametri di tipo string e che sono semplicemente i percorsi delle classi Model e ResourceModel. Da notare la soluzione che magento utilizza per passare i percorsi <FULLY_QUALIFIED_CLASS_NAME>::class

Metodi degli oggetti Entity di Magento 2 e DataObject

Come abbiamo visto prima, entrambi i modelli, sia semplici che EAV in magento estendono la classe AbstractModel che a sua volta estende la classe DataObject. Quest’ultima classe ha dei metodi generici per i dati che sono importanti perchè utilizzati spesso.

  • toArray che converte un array di oggetti in un array con delle chiavi ( parametro $key come una mappa)
  • toXml che converte un oggetto in una stringa XML
  • toJson che converte un oggetto in un JSON
  • toString che converte un oggetto in una stringa con un formato predefinito
  • serialize che converte un oggetto in una stringa con una chiave e un valore

L’altro gruppo di metodi sono implementati attraverso il metodo magico __call, che permette di eseguire le operazioni con i campi della tabella utilizzando il nome della colonna.

  • get<NomeAttributo>
  • set<NomeAttributo>
  • uns<NomeAttributo>
  • has<NomeAttributo>

Quindi se creiamo manualmente la tabella tutorial4dev_easy_simple  per il nostro semplice modulo di esempio

CREATE TABLE `tutorial4dev_easy_simple` (
`entity_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(34) NOT NULL,
`note` text NOT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`entity_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

possiamo usare i metodi magici della classe DataObject per operare con i campi della tabella ne seguente modo:

$simple->setName('tutorial4dev');
$simple->setNote('tutorial4dev');
$simple->save();

Creare la tabella manualmente non è il massimo per la creazione di moduli, infatti è possibile fare tutto tramite gli script che analizzeremo nel seguente articolo

Pasquale Guarino

pasquale.guarino80@gmail.com

WP2Social Auto Publish Powered By : XYZScripts.com