Zoeken…


Opmerkingen

Entiteit

Slaat informatie op over het type gegevens dat wordt opgeslagen. In het geval van Magento is dit klant, product, categorie, etc.

Attribuut

De individuele eigenschappen van elk van de entiteiten, bijvoorbeeld naam, gewicht, e-mailadres, enz.

Waarde

De waarde van een bepaalde entiteit en kenmerk. We kunnen bijvoorbeeld de klantentiteit en het e-mailkenmerk opgeven en deze vervolgens de waarde [email protected] geven.

Databaseschema

eav_entity

De entiteitstabel.

eav_entity_attribute

De attributentabel.

eav_entity_ {soort}

De waardetabellen. Typen zijn datetime, decimalen, int, text en varchar.

Het is belangrijk op te merken dat de tabel eav_entity_varchar het type varchar voor waarden heeft, zelfs als datum of geheel getal beter bij de waarde zou passen.

Modellen versus bronmodellen

Alle modellen in Mage / Eav / Model / Resource zijn Mysql4 en zijn resourcemodellen.

Bovendien Entity / Abstract.php en Entity / Setup.php.

Vlak versus EAV

De EAV-modellen zijn complexer en bieden logica om vanuit meerdere tabellen op te slaan en te laden, terwijl de platte of standaardmodellen relatief eenvoudig (traditioneel) zijn.

Standaardmodellen beheren hun eigenschappen voornamelijk met gegevensverzamelaars en getters die met een enkele tabel werken. EAV-modellen beheren hoofdzakelijk hun attribuutmodellen. Standaardmodellen slaan hun gegevens alleen op in een tabel en laden deze op. EAV-modellen laden alle (of een specifieke set) attributen na het laden van basisgegevens en bewaren attributen na het opslaan van gegevens (inclusief het invoegen, bijwerken en verwijderen van attributen).

EAV Resource Model Voorbeelden

Om entiteiten te vinden die het EAV-opslagschema gebruiken, zoekt de string naar Mage_Eav_Model_Entity_Abstract. Dit zou alle hulpbronmodellen op basis van de EAV-structuur moeten onthullen. De resulterende lijst bevat echter veel verouderde klassen uit de Mage_Sales-module die niet langer worden gebruikt.

De enige modules met entiteiten die het EAV-opslagschema gebruiken, zijn Mage_Catalog (categorieën en producten) en Mage_Customer (klanten en adressen).

Klantgroepen gebruiken het opslagschema voor platte tafels. Alle verkoopentiteiten werden met de introductie van Magento 1.4 omgezet in platte-tafelentiteiten.

De reden dat EAV wordt gebruikt, is omdat entiteiten een onbepaald aantal eigenschappen kunnen hebben en dus flexibel kunnen blijven. Wanneer u bijvoorbeeld een nieuw kenmerk toevoegt aan een klantentiteit (wat een EAV-entiteit is), hoeft de databasetabel niet te worden gewijzigd om dit nieuwe kenmerk toe te voegen.

voordelen

Flexibiliteit Databaseschema hoeft niet te veranderen met het model Snel te implementeren

nadelen

  • Inefficiënt

Een query die 20 kolommen retourneert, bestaat normaal gesproken uit 20 self joins in EAV. De Mage_Eav-module gebruikt over het algemeen geen joins om de attribuutwaardegegevens te laden. In plaats daarvan worden unieselecties gebruikt. Joins worden alleen gebruikt voor het filteren van EAV-collecties.

  • Geen mechanisme voor relaties tussen subtypen
  • Geen groepering van subtypen van entiteiten

Website en winkelbereiken

Om website- en winkelbereikattribuutwaarden binnen EAV af te handelen, bestaat er een store_id-waarde in de catalogusentiteit om het bereik weer te geven dat teruggaat naar core_store. Naast de normale winkels (winkelweergaven) is er ook een winkel '0' die de globale waarde is. In een bepaalde winkel zal het systeem eerst controleren op een entiteitswaarde in de huidige winkel en dan terugvallen op de wereldwijde entiteit. Mage_Customer EAV-entiteiten hebben geen store_id bereikkolom.

Invoegen, bijwerken en verwijderen

Om te bepalen of een invoeging, update of verwijdering moet worden uitgevoerd op een attribuut, wordt een vergelijking gemaakt met het oorspronkelijke object. Het oorspronkelijke object is in feite een duplicaat van het gegevensobject toen de entiteit uit de database werd opgehaald.

  • Als het kenmerk oorspronkelijk bestaat en de nieuwe waarde ervan niet leeg is; het wordt bijgewerkt.
  • Als het kenmerk oorspronkelijk bestaat, maar de nieuwe waarde is ingesteld op leeg; het wordt verwijderd. - Als het kenmerk oorspronkelijk niet bestaat en de nieuwe waarde niet leeg is; het voegt in.

Attribuutbeheer

Attribuutmodellen

Attribuutmodel Vertegenwoordigt het attribuut in de database, de logica is standaard voor alle attributen en is moeilijk te wijzigen .

Frontend Model

De interface van het attribuut met de frontend en biedt elke logica die het attribuut op de frontend vereist, bijv. De methode getUrl () op afbeeldingen.

Backend model

Deze voeren validatie uit op het kenmerk voordat het wordt opgeslagen in de database. Het wachtwoord-backendmodel converteert het wachtwoord bijvoorbeeld naar een hash voordat het wordt opgeslagen. Het controleert ook of het wachtwoord en de wachtwoordbevestiging overeenkomen voordat het wordt opgeslagen.

Bron modellen

Wordt gebruikt om de beschikbare opties voor een attribuut te vullen, bijv. Catalogus / product_status is ingeschakeld en uitgeschakeld.

Vereiste methoden

Een bronmodel vereist:

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

Meestal hoeft alleen getAllOptions () te worden geïmplementeerd, omdat er al een implementatie voor getOptionText () bestaat in het abstracte bronmodel Mage_Eav_Model_Entity_Attribute_Source_Abstract.

Een frontend-model vereist niet de methode getValue ().

Een backend-model vereist:

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

Al deze methoden zijn geïmplementeerd in het abstracte backend-model Mage_Eav_Model_Entity_Attribute_Backend_Abstract. Voor aangepaste backend-modellen hoeven alleen de methoden die aanpassing vereisen te worden genegeerd.

Systeemconfiguratie Bron Modellen

Kan niet worden gebruikt voor EAV-kenmerken. EAV-bronmodellen implementeren de methode getAllOptions, terwijl adminhtml-bronmodellen de methode toOptionArray () implementeren.

Standaardbronconfiguratie bronmodellen zijn te vinden in Mage / Adminhtml / Model / System / Config / Source /.

Attribuut Bronmodellen

Het doel van Attribute Source Models is het leveren van de lijst met opties en waarden voor geselecteerde en multiselect-attributen. Ze leveren desgewenst ook de kolominformatie aan de index van de vlakke tafelcatalogus.

Voer de volgende handelingen uit om een lijst met alle opties voor een kenmerk te krijgen:

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

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

Standaardkenmerkmodellen

Als er geen klasse is opgegeven als frontend, backend of - voor geselecteerde of multiselect-kenmerken - bronmodellen, wordt een standaardklasse gebruikt.

Het standaard frontend-model met kenmerk is Mage_Eav_Model_Entity_Attribute_Frontend_Default.

Het standaard-backendmodel voor het kenmerk is afhankelijk van de kenmerkcode en wordt bepaald in de methode 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();
    }
?>

Als de methode doorloopt tot de laatste regel, wordt Mage_Eav_Model_Entity_Attribute_Backend_Default gebruikt.

Het standaardbronmodel is ingesteld in Mage_Eav_Model_Entity_Attribute_Source_Table. Dit wordt ingesteld in het kenmerkmodel van catalogusmodules. Het standaardconfiguratiebronmodel dat is opgegeven in de eav-module wordt nooit gebruikt.

Attribuut toevoegen

Als u EAV-kenmerken wilt toevoegen, gebruikt u Mage_Eav_Model_Entity_Setup door het uit te breiden in de set-upklasse.

addAttribute () Maakt de attributen, voegt deze toe aan groepen en sets (inclusief standaard) of updates als deze al bestaat updateAttribute () Werkt alleen de attribuutgegevens bij. Aangepaste setupklassen kunnen worden gebruikt om deze methoden uit te breiden, extra gegevens toe te voegen of de benodigde argumenten te vereenvoudigen.

Platte tafels

Flat catalog attributen worden beheerd door indexers:

Mage_Catalog_Model_Resource_Product_Flat_Indexer :: updateAttribute () Mage_Catalog_Model_Resource_Category_Flat :: synchronize () Productkenmerken worden aan de platte tabel toegevoegd als ze dat zijn (zie Mage_Catalog_Model_Resource_Product_Flat_Indexer :: getAttribute) (getAttribute):

Statisch (backend-type) Filtreerbaar Gebruikt in productlijst Gebruikt voor promoregels Gebruikt voor sorteren op systeemattributen Er is een andere platte tabel voor elke winkel, elke winkel bevat een andere kenmerkwaarde van de entiteit met een winkelbereik. Meertalige waarden worden beheerd door verschillende winkels voor elke taal te hebben.

implementeer de interface van frontend-, bron- en backendmodellen van attributen

Frontend-interface

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

}

Broninterface

/**
* 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-interface

/**
* 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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow