Ricerca…


Osservazioni

Entità

Memorizza informazioni sul tipo di dati memorizzati. Nel caso di Magento questo è cliente, prodotto, categoria, ecc.

Attributo

Le singole proprietà di ciascuna entità, ad es. Nome, peso, indirizzo e-mail, ecc.

Valore

Il valore di una determinata entità e attributo. Ad esempio, potremmo specificare l'entità cliente e l'attributo e-mail e dargli il valore [email protected].

Schema del database

eav_entity

La tabella delle entità.

eav_entity_attribute

La tabella degli attributi.

eav_entity_ {tipo}

Le tabelle dei valori. I tipi sono datetime, decimals, int, text e varchar.

È importante notare che la tabella eav_entity_varchar ha il tipo varchar per i valori anche se la data o il numero intero si adattano meglio al valore.

Modelli contro modelli di risorse

Tutti i modelli all'interno di Mage / Eav / Model / Resource sono Mysql4 e sono modelli di risorse.

Inoltre Entity / Abstract.php e Entity / Setup.php.

Versus EAV piatto

I modelli EAV sono più complessi, forniscono la logica per salvare e caricare da più tabelle, mentre i modelli piatti o standard sono relativamente semplici (tradizionali).

I modelli standard gestiscono principalmente le loro proprietà con data setter e getter che lavorano con una singola tabella. I modelli EAV gestiscono principalmente i loro modelli di attributi. I modelli standard salvano i loro dati solo su una tabella e li caricano. I modelli EAV caricano tutti gli attributi (o un set specifico) dopo aver caricato i dati di base e salvato gli attributi dopo aver salvato i dati (incluso l'inserimento, l'aggiornamento e l'eliminazione degli attributi).

Esempi di modelli di risorse EAV

Per trovare le entità che utilizzano lo schema di archiviazione EAV alla ricerca della stringa, è possibile utilizzare Mage_Eav_Model_Entity_Abstract. Questo dovrebbe rivelare tutti i modelli di risorse basati sulla struttura EAV. Tuttavia, l'elenco risultante includerà molte classi obsolete dal modulo Mage_Sales che non vengono più utilizzate.

Gli unici moduli contenenti entità che utilizzano lo schema di archiviazione EAV sono Mage_Catalog (categorie e prodotti) e Mage_Customer (clienti e indirizzi).

I gruppi di clienti utilizzano lo schema di archiviazione della tabella flat. Tutte le entità di vendita in cui sono state convertite in entità di tabella flat con il rilascio di Magento 1.4.

La ragione per cui EAV viene utilizzato è che le entità possono avere un numero indeterminato di proprietà e quindi rimanere flessibili. Ad esempio, quando aggiungi un nuovo attributo a un'entità Cliente (che è un'entità EAV), la tabella del database non deve essere modificata per poter aggiungere questo nuovo attributo.

vantaggi

Flessibilità Lo schema del database non deve essere modificato con il modello Quick da implementare

svantaggi

  • Inefficiente

Una query che restituisce normalmente 20 colonne consisterebbe in 20 self join in EAV. Tuttavia, il modulo Mage_Eav generalmente non utilizza i join per caricare i dati del valore dell'attributo. Invece vengono usati i sindacati. I join vengono utilizzati solo per filtrare le raccolte EAV.

  • Nessun meccanismo per le relazioni tra sottotipi
  • Nessun raggruppamento di sottotipi di entità

Siti Web e negozi

Per gestire i valori degli attributi del sito Web e dello spazio di archiviazione all'interno di EAV, esiste un valore store_id sull'entità catalogo per mostrare l'ambito che collega nuovamente a core_store. Insieme ai normali negozi (punti vendita) c'è anche un negozio '0' che è il valore globale. Quando si trova su un determinato negozio, il sistema prima controlla il valore di un'entità nel negozio corrente e quindi torna all'entità globale. Le entità EAV di Mage_Customer non hanno una colonna dello scope store_id.

Inserisci, Aggiorna e Elimina

Per determinare se un inserto, l'aggiornamento o l'eliminazione devono essere eseguiti su un attributo, viene eseguito un confronto con l'oggetto originale. L'oggetto originale è fondamentalmente un duplicato dell'oggetto dati quando l'entità è stata richiamata dal database.

  • Se l'attributo esiste originariamente e il suo nuovo valore non è vuoto; si aggiorna.
  • Se l'attributo esiste in origine ma il suo nuovo valore è impostato su vuoto; cancella. - Se l'attributo non esiste in origine e il suo nuovo valore non è vuoto; inserisce.

Gestione degli attributi

Modelli di attributi

Modello di attributo Rappresenta l'attributo nel modulo del database, la sua logica è standard su tutti gli attributi ed è difficile da modificare .

Modello di Frontend

L'interfaccia dell'attributo al frontend e fornisce qualsiasi logica richiesta dall'attributo sul frontend, ad esempio il metodo getUrl () sulle immagini.

Modello di backend

Questi eseguono la convalida sull'attributo prima che venga salvato nel database. Ad esempio, il modello di backend della password converte la password in un hash prima che venga salvata. Controlla inoltre che la password e la conferma della password corrispondano prima di salvare.

Modelli di origine

Utilizzato per popolare le opzioni disponibili per un attributo, ad es. Catalog / product_status è abilitato e disabilitato.

Metodi richiesti

Un modello sorgente richiede:

<?php
    public function getAllOptions();
    public function getOptionText($value);
?>

Di solito, solo getAllOptions () deve essere implementato anche se un'implementazione per getOptionText () esiste già nel modello sorgente astratto Mage_Eav_Model_Entity_Attribute_Source_Abstract.

Un modello di frontend non richiede il metodo getValue ().

Un modello di back-end richiede:

<?php
    public function getTable();
    public function isStatic();
    public function getType();
    public function getEntityIdField();
    public function setValueId($valueId);
    public function getValueId();
    public function afterLoad($object);
    public function beforeSave($object);
    public function afterSave($object);
    public function beforeDelete($object);
    public function afterDelete($object);
    public function getEntityValueId($entity);
    public function setEntityValidId($entity, $valueId);
?>

Tutti questi metodi sono implementati nel modello di backend astratto Mage_Eav_Model_Entity_Attribute_Backend_Abstract. Per i modelli di backend personalizzati, solo i metodi che richiedono la personalizzazione devono essere sovrascritti.

Modelli di origine della configurazione del sistema

Non può essere utilizzato per gli attributi EAV. I modelli di origine EAV implementano il metodo getAllOptions mentre i modelli di origine adminhtml implementano il metodo toOptionArray ().

I modelli di origine della configurazione di sistema di default sono disponibili in Mage / Adminhtml / Model / System / Config / Source /.

Attributi Modelli di origine

Lo scopo di Attribute Source Models è fornire l'elenco di opzioni e valori per gli attributi select e multiselect. Forniscono inoltre le informazioni della colonna all'indicizzatore della tabella flat del catalogo, se necessario.

Per ottenere un elenco di tutte le opzioni per un attributo, effettuare le seguenti operazioni:

<?php
    $options = $attribute->getSource()->getAllOptions(false);

    // or for admin
    $options = $_attribute->getSource()->getAllOptions(true, true);
?>

Modelli di attributi predefiniti

Se nessuna classe viene specificata come frontend, backend o - per gli attributi select o multiselect - source models, viene utilizzata una classe predefinita.

Il modello di frontend degli attributi predefinito è Mage_Eav_Model_Entity_Attribute_Frontend_Default.

Il modello di back-end dell'attributo predefinito dipende dal codice dell'attributo ed è determinato nel metodo Mage_Eav_Model_Entity_Attribute :: _ getDefaultBackendModel ().

<?php
    protected function _getDefaultBackendModel()
    {
        switch ($this->getAttributeCode()) {
            case 'created_at':
                return 'eav/entity_attribute_backend_time_created';

            case 'updated_at':
                return 'eav/entity_attribute_backend_time_updated';

            case 'store_id':
                return 'eav/entity_attribute_backend_store';

            case 'increment_id':
                return 'eav/entity_attribute_backend_increment';
        }

        return parent::_getDefaultBackendModel();
    }
?>

Se il metodo passa all'ultima riga, viene utilizzato Mage_Eav_Model_Entity_Attribute_Backend_Default.

Il modello di origine predefinito è impostato in Mage_Eav_Model_Entity_Attribute_Source_Table. Questo è impostato nel modello di attributo dei moduli del catalogo. Il modello di origine di configurazione predefinito specificato nel modulo eav non viene mai utilizzato.

Aggiungi attributo

Per aggiungere gli attributi EAV, utilizzare Mage_Eav_Model_Entity_Setup estendendo nella classe di installazione.

addAttribute () Crea gli attributi, aggiungilo a gruppi e insiemi (incluso quello predefinito) o aggiorna se già esiste updateAttribute () Aggiorna solo i dati degli attributi. Le classi di installazione personalizzate possono essere utilizzate per estendere questi metodi, aggiungendo dati aggiuntivi o semplificando gli argomenti necessari.

Tavoli piatti

Gli attributi di catalogo semplici sono gestiti dagli indicizzatori:

Mage_Catalog_Model_Resource_Product_Flat_Indexer :: updateAttribute () Mage_Catalog_Model_Resource_Category_Flat :: synchronize () Gli attributi del prodotto vengono aggiunti alla tabella flat se lo sono (vedere Mage_Catalog_Model_Resource_Product_Flat_Indexer :: getAttributeCodes ()):

Statico (tipo di back-end) Filtrabile Utilizzato nell'elenco dei prodotti Utilizzato per le regole promozionali Utilizzato per l'ordinamento in base agli attributi di sistema Esiste una tabella piatta diversa per ogni negozio, ognuno dei quali contiene un valore di attributo dell'entità con ambito negozio differente. I valori multilingue sono gestiti avendo diversi negozi per ogni lingua.

implementare l'interfaccia dei modelli di frontend, source e backend degli attributi

Interfaccia di frontend

/**
* Entity attribute frontend interface
*
* Frontend is providing the user interface for the attribute
*
*/
interface Mage_Eav_Model_Entity_Attribute_Frontend_Interface
{

}

Interfaccia di origine

/**
* Entity attribute select source interface
*
* Source is providing the selection options for user interface
*
*/
interface Mage_Eav_Model_Entity_Attribute_Source_Interface
{
/**
* Retrieve All options
*
* @return array
*/
public function getAllOptions();

/**
* Retrieve Option value text
*
* @param string $value
* @return mixed
*/
public function getOptionText($value);
}

Interfaccia di backend

/**
* Entity attribute backend interface
*
* Backend is responsible for saving the values of the attribute
* and performing pre and post actions
*
*/
interface Mage_Eav_Model_Entity_Attribute_Backend_Interface
{
public function getTable();
public function isStatic();
public function getType();
public function getEntityIdField();
public function setValueId($valueId);
public function getValueId();
public function afterLoad($object);
public function beforeSave($object);
public function afterSave($object);
public function beforeDelete($object);
public function afterDelete($object);

/**
* Get entity value id
*
* @param Varien_Object $entity
*/
public function getEntityValueId($entity);

/**
* Set entity value id
*
* @param Varien_Object $entity
* @param int $valueId
*/
public function setEntityValueId($entity, $valueId);
}


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow