Suche…


Bemerkungen

Entität

Speichert Informationen zum Typ der gespeicherten Daten. Im Falle von Magento ist dies Kunde, Produkt, Kategorie usw.

Attribut

Die individuellen Eigenschaften der einzelnen Entitäten, z. B. Name, Gewicht, E-Mail-Adresse usw.

Wert

Der Wert einer bestimmten Entität und eines bestimmten Attributs. Zum Beispiel können wir die Kundeneinheit und das E-Mail-Attribut angeben und dann den Wert [email protected] angeben.

Datenbankschema

eav_entity

Die Entitätstabelle

eav_entity_attribute

Die Attributtabelle

eav_entity_ {type}

Die Wertetabellen. Typen sind datetime, dezimals, int, text und varchar.

Beachten Sie, dass die Tabelle eav_entity_varchar den Wert varchar für Werte hat, auch wenn Datum oder Ganzzahl besser zum Wert passen.

Modelle im Vergleich zu Ressourcenmodellen

Alle Modelle in Mage / Eav / Model / Resource sind Mysql4 und sind Ressourcenmodelle.

Zusätzlich Entity / Abstract.php und Entity / Setup.php.

Wohnung gegen EAV

Die EAV-Modelle sind komplexer und bieten Logik zum Speichern und Laden aus mehreren Tabellen, während die flachen oder Standardmodelle relativ unkompliziert (traditionell) sind.

Standardmodelle verwalten ihre Eigenschaften hauptsächlich mit Datensetzern und Getigtern, die mit einer einzigen Tabelle arbeiten. EAV-Modelle verwalten hauptsächlich ihre Attributmodelle. Standardmodelle speichern ihre Daten nur in einer Tabelle und laden sie von dort. EAV-Modelle laden alle (oder einen bestimmten Satz) Attribute nach dem Laden der Basisdaten und speichern die Attribute nach dem Speichern der Daten (einschließlich Einfügen, Aktualisieren und Löschen von Attributen).

EAV-Ressourcenmodellbeispiele

Um mit dem EAV-Speicherschema nach Entitäten zu suchen, die nach der Zeichenfolge erweitert werden, kann Mage_Eav_Model_Entity_Abstract verwendet werden. Dies sollte alle Ressourcenmodelle offenlegen, die auf der EAV-Struktur basieren. Die Ergebnisliste enthält jedoch viele veraltete Klassen aus dem Mage_Sales-Modul, die nicht mehr verwendet werden.

Die einzigen Module, die Entitäten enthalten, die das EAV-Speicherschema verwenden, sind Mage_Catalog (Kategorien und Produkte) und Mage_Customer (Kunden und Adressen).

Kundengruppen verwenden das Speicherschema für flache Tabellen. Alle Vertriebsgesellschaften wurden mit der Veröffentlichung von Magento 1.4 in flache Tabelleneinheiten umgewandelt.

Der Grund für die Verwendung von EAV ist, dass Entitäten eine unbestimmte Anzahl von Eigenschaften haben können und daher flexibel bleiben. Wenn Sie beispielsweise einer Entität Customer (die eine EAV-Entität ist) ein neues Attribut hinzufügen, muss die Datenbanktabelle nicht geändert werden, damit dieses neue Attribut hinzugefügt wird.

Vorteile

Flexibilität Das Datenbankschema muss nicht mit dem zu implementierenden Modell geändert werden

Nachteile

  • Ineffizient

Eine Abfrage, die 20 Spalten zurückgibt, besteht normalerweise aus 20 Self-Joins in EAV. Das Mage_Eav-Modul verwendet jedoch im Allgemeinen keine Joins, um die Attributwertdaten zu laden. Stattdessen werden union selects verwendet. Joins werden nur zum Filtern von EAV-Sammlungen verwendet.

  • Kein Mechanismus für Beziehungen zwischen Untertypen
  • Keine Gruppierung von Entity-Subtypen

Website- und Store-Bereiche

Um mit Website- und Speicherbereichsattributwerten innerhalb von EAV umzugehen, ist in der Katalogentität ein store_id-Wert vorhanden, der den Gültigkeitsbereich anzeigt, der eine Verbindung zu core_store herstellt. Neben den normalen Stores (Store Views) gibt es auch einen Store '0', der den globalen Wert darstellt. Wenn sich das System in einem bestimmten Geschäft befindet, prüft das System zuerst nach einem Entitätswert im aktuellen Geschäft und greift dann auf die globale Entität zurück. Mage_Customer EAV-Entitäten verfügen nicht über eine Store_id-Bereichsspalte.

Einfügen, Aktualisieren und Löschen

Um zu bestimmen, ob ein Einfügen, Aktualisieren oder Löschen für ein Attribut ausgeführt werden muss, wird ein Vergleich mit dem ursprünglichen Objekt durchgeführt. Das ursprüngliche Objekt ist im Wesentlichen ein Duplikat des Datenobjekts, als die Entität aus der Datenbank abgerufen wurde.

  • Wenn das Attribut ursprünglich vorhanden ist und der neue Wert nicht leer ist. es wird aktualisiert.
  • Wenn das Attribut ursprünglich vorhanden ist, der neue Wert jedoch leer ist. es löscht. - Wenn das Attribut ursprünglich nicht vorhanden ist und der neue Wert nicht leer ist. es fügt ein.

Attributverwaltung

Attributmodelle

Attributmodell Stellt das Attribut im Datenbankformular dar, seine Logik ist Standard für alle Attribute und lässt sich nur schwer ändern .

Frontend-Modell

Die Schnittstelle des Attributs zum Frontend enthält alle Logik, die das Attribut für das Frontend erfordert, z. B. die getUrl () - Methode für Images.

Backend-Modell

Diese führen eine Validierung des Attributs durch, bevor es in der Datenbank gespeichert wird. Das Kennwort-Backend-Modell konvertiert das Kennwort beispielsweise vor dem Speichern in einen Hash. Es überprüft auch, ob das Passwort und das Passwort vor dem Speichern übereinstimmen.

Quellmodelle

Wird verwendet, um die für ein Attribut verfügbaren Optionen aufzufüllen, z. B. Katalog / Produktstatus wurde aktiviert und deaktiviert.

Erforderliche Methoden

Ein Quellmodell erfordert:

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

Normalerweise muss nur getAllOptions () implementiert werden, da im abstrakten Quellmodell Mage_Eav_Model_Entity_Attribute_Source_Abstract bereits eine Implementierung für getOptionText () vorhanden ist.

Ein Frontend-Modell erfordert nicht die Methode getValue ().

Ein Backend-Modell erfordert:

<?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);
?>

Alle diese Methoden sind im abstrakten Backend-Modell Mage_Eav_Model_Entity_Attribute_Backend_Abstract implementiert. Für benutzerdefinierte Backend-Modelle müssen nur die Methoden, die angepasst werden müssen, überschrieben werden.

Quellmodelle für die Systemkonfiguration

Kann nicht für EAV-Attribute verwendet werden. EAV-Quellmodelle implementieren die getAllOptions-Methode, während Adminhtml-Quellmodelle die toOptionArray () -Methode implementieren.

Standard-Quellmodelle für die Systemkonfiguration finden Sie in Mage / Adminhtml / Model / System / Config / Source /.

Attributquellenmodelle

Der Zweck von Attributquellenmodellen besteht darin, die Liste der Optionen und Werte für ausgewählte und Mehrfachauswahlattribute bereitzustellen. Bei Bedarf liefern sie auch die Spalteninformationen an den Katalogindex für flache Tabellen.

Um eine Liste aller Optionen für ein Attribut zu erhalten, führen Sie Folgendes aus:

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

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

Standardattributmodelle

Wenn keine Klasse als Frontend, Backend oder - für ausgewählte oder Multiselect-Attribute - Quellmodelle angegeben ist, wird eine Standardklasse verwendet.

Das Standardattribut-Frontend-Modell ist Mage_Eav_Model_Entity_Attribute_Frontend_Default.

Das Standard-Attribut-Backend-Modell hängt vom Attributcode ab und wird in der Methode Mage_Eav_Model_Entity_Attribute :: _ getDefaultBackendModel () festgelegt.

<?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();
    }
?>

Wenn die Methode in die letzte Zeile fällt, wird Mage_Eav_Model_Entity_Attribute_Backend_Default verwendet.

Das Standardquellenmodell wird in Mage_Eav_Model_Entity_Attribute_Source_Table festgelegt. Dies wird im Attributmodell der Katalogmodule festgelegt. Das im eav-Modul angegebene Standard-Konfigurationsquellenmodell wird niemals verwendet.

Attribute hinzufügen

Um EAV-Attribute hinzuzufügen, verwenden Sie Mage_Eav_Model_Entity_Setup, indem Sie die Setup-Klasse erweitern.

addAttribute () Erstellt die Attribute, fügt sie zu Gruppen und Gruppen hinzu (einschließlich Standard) oder aktualisiert, wenn sie bereits vorhanden sind. updateAttribute () Aktualisiert nur die Attributdaten. Benutzerdefinierte Setup-Klassen können verwendet werden, um diese Methoden zu erweitern, zusätzliche Daten hinzuzufügen oder die erforderlichen Argumente zu vereinfachen.

Flache Tische

Flache Katalogattribute werden von Indexern verwaltet:

Mage_Catalog_Model_Resource_Product_Flat_Indexer :: updateAttribute () Mage_Catalog_Model_Resource_Category_Flat :: synchronize () Produktattribute werden der Flach-Tabelle hinzugefügt, falls dies der Fall ist (siehe Mage_Catalog_Model_Resource_Presct_Read_Adr.)

Statisch (Backend-Typ) Filterbar Wird in der Produktliste verwendet. Wird für Promo-Regeln verwendet. Wird für die Sortierung nach Systemattributen verwendet. Für jede Filiale gibt es eine andere flache Tabelle, die jeweils einen anderen Entitätsattributwert für die Filiale enthält. Mehrsprachige Werte werden durch unterschiedliche Speicher für jede Sprache verwaltet.

Implementierung der Schnittstelle von Attribut-Frontend-, Quell- und Backend-Modellen

Frontend-Schnittstelle

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

}

Quellschnittstelle

/**
* 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);
}

Backend-Schnittstelle

/**
* 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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow