Magento 2 - Model ed Entity - Semplice e EAVsteemCreated with Sketch.

in magento2 •  6 years ago  (edited)

I Models e le Entities su Magento 2

Su Magento 2, per poter operare con le tabelle, si utilizzano Model e Entity ospitati nella directory Models del singolo componente. Alcuni di questi sono persistenti e altri non persistenti. Tanti moduli di Magento 2 utilizzano il database per salvare i dati in modi persistente e quindi le entità sono importantissime se si vuole sviluppare un proprio componente che salvi i dati nel database. Magento utilizza tre tipi di classi che permetto di effettuare le operazioni CRUD (CREATE, READ, UPDATE, DELETE), le classiche operazioni che si effettuano per la persistenza dei dati:

  • model
  • resource model
  • collection

I modelli di persistenza di Magento 2 sono di due tipi, semplici o EAV (Entity-Attribute-Value)

Modello semplice

Prendiamo per esempio il modello semplice di persistenza delle Review vendor/magento/module-review che serve per le recensioni del prodotto. Questo modulo utilizza il modello di persistenza semplice, nella directory Model,  quindi come detto in precedenza utilizza le tre classi

  • model class Review extends \Magento\Framework\Model\AbstractModel nella root directory Model
  • resource model class Review extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb nella directory Model/ResouceModel 
  • collection class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection nella directory Model/ResouceModel/Review

Modello EAV ( Entity-Attribute-Value )

Per questo modello possiamo utilizzare il modulo di magento Customer vendor/magento/module-customer che si utilizza per salvare i clienti. Questo modulo utilizza il modello di  persistenza EAV, nella directory Model

  • model class Cusotmer extends \Magento\Framework\Model\AbstractModel nella root directory Model
  • resource model class Review extends Magento\Eav\Model\Entity\VersionControl\AbstractEntity nella directory Model/ResouceModel 
  • collection class Collection extends \Magento\Eav\Model\Entity\Collection\VersionControl\AbstractCollection nella directory Model/ResouceModel/Customer

Come possiamo vedere sopra, le differenze tra i due modelli, semplice e EAV, sono nelle classi resource model e collection. La classe resource model è il nostro collegamento al database.Quando inseriamo una review, nel primo caso, i dati saranno salvati nel database utilizzando il classico modello orizzontale, quindi i dati saranno salvati in una singola tabella, che in questo caso è la tabella review. Se invece salviamo un cliente, i dati saranno salvati utilizzando un modello verticale nel database. Questo vuol dire che i dati saranno salvati in varie tabelle in base ai tipi di dati. Per i clienti quindi i dati saranno salvati nelle seguenti tabelle:

  • customer_entity
  • customer_entity_datetime
  • customer_entity_decimal
  • customer_entity_int
  • customer_entity_text
  • customer_entity_varchar

Come si deduce dai nomi delle tabelle, ogni tipo di dato sarà salvato in una tabella. Magento mantiene un indice per salvare i dati nelle tabelle precedenti all’interno della tabella eav_attribute nel campo backend_type visualizzabile utilizzando la seguente query in MySQL:

SELECT DISTINCT backend_type FROM eav_attribute;

Questa query estrae tutti valori  non (DISTINCT = elimina i duplicati) contenuti nel campo backend_type della tabella eav_attribute :

  • static gli attributi con questo valore saranno salvati nelle tabelle <entity_name>_entity
  • varchar gli attributi con questo valore saranno salvati nelle tabelle <entity_name>_varchar
  • int gli attributi con questo valore saranno salvati nelle tabelle <entity_name>_int
  • text gli attributi con questo valore saranno salvati nelle tabelle <entity_name>_text
  • datetime gli attributi con questo valore saranno salvati nelle tabelle <entity_name>_datetime
  • decimal gli attributi con questo valore saranno salvati nelle tabelle <entity_name>_decimal

Il resto delle informazioni rilevanti sono sparse nelle tabelle eav_attribute_*. Per capite tutti i modelli di entità EAV che Magento utilizza nel suo framework possiamo utilizzare la seguente query.

SELECT entity_type_code, entity_model FROM eav_entity_type;

  • customer utilizza l’entity model Magento\Customer\Model\ResourceModel\Customer
  • customer_address utilizza l’entity model Magento\Customer\Model\ResourceModel\Address
  • catalog_category utilizza l’entity model Magento\Customer\Model\ResourceModel\Category
  • catalog_product utilizza l’entity model Magento\Customer\Model\ResourceModel\Product
  • order utilizza l’entity model Magento\Customer\Model\ResourceModel\Order
  • invoice utilizza l’entity model Magento\Customer\Model\ResourceModel\Invoice
  • creditmemo utilizza l’entity model Magento\Customer\Model\ResourceModel\Creditmemo
  • shipment utilizza l’entity model Magento\Customer\Model\ResourceModel\Shipment

Di queste solo quattro utilizzano a pieno il modello EAV, come indicato dalla seguente query.

SELECT DISTINCT entity_type_id FROM eav_attribute;

  • customer
  • customer_address
  • catalog_category
  • catalog_product

Le altre sono semplici tabelle flat dato che i loro dati vengono salvati in  modo orizzontale in una sola tabella. Come si evince, il modello EAV, risulta molto più complesso (dato che i dati vengono sparpagliati in tante tabelle ). Sono utili soprattutto per creare attributi dinamici tramite un interfaccia come succede nel caso dei prodotti di magento che hanno possono avere molte combinazioni. Quindi la maggior parte delle volte si utilizza il modello semplice per poter salvare dati in una tabella.

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Hello @clokers! This is a friendly reminder that you have 3000 Partiko Points unclaimed in your Partiko account!

Partiko is a fast and beautiful mobile app for Steem, and it’s the most popular Steem mobile app out there! Download Partiko using the link below and login using SteemConnect to claim your 3000 Partiko points! You can easily convert them into Steem token!

https://partiko.app/referral/partiko

Congratulations @clokers! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 1 year!

Click here to view your Board

Do not miss the last post from @steemitboard:

Carnival Challenge - Collect badge and win 5 STEEM
Vote for @Steemitboard as a witness and get one more award and increased upvotes!

Hello clokers, welcome to Partiko, an amazing community for crypto lovers! Here, you will find cool people to connect with, and interesting articles to read!

You can also earn Partiko Points by engaging with people and bringing new people in. And you can convert them into crypto! How cool is that!

Hopefully you will have a lot of fun using Partiko! And never hesitate to reach out to me when you have questions!

Cheers,
crypto.talk
Creator of Partiko