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 directoryModel
- resource model class
Review extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
nella directoryModel/ResouceModel
- collection
class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
nella directoryModel/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 directoryModel
- resource model
class Review extends Magento\Eav\Model\Entity\VersionControl\AbstractEntity
nella directoryModel/ResouceModel
- collection
class Collection extends \Magento\Eav\Model\Entity\Collection\VersionControl\AbstractCollection
nella directoryModel/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.
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
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Congratulations @clokers! You received a personal award!
Click here to view your Board
Do not miss the last post from @steemitboard:
Vote for @Steemitboard as a witness and get one more award and increased upvotes!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
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
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit