Sök…


Anmärkningar

Entitet

Lagrar information om typen av data som lagras. För Magento är detta kund, produkt, kategori etc.

Attribut

De enskilda egenskaperna för var och en av enheterna, t.ex. namn, vikt, e-postadress etc.

Värde

Värdet på en given enhet och attribut. Vi kan till exempel specificera kundenheten och e-postattributet och sedan ge det värdet [email protected].

Databasschema

eav_entity

Enhetstabellen.

eav_entity_attribute

Attributstabellen.

eav_entity_ {typ}

Värdetabellerna. Typer är datetime, decimaler, int, text och varchar.

Viktigt att notera att tabellen eav_entity_varchar har typen varchar för värden även om datum eller heltal skulle passa värdet bättre.

Modeller kontra resursmodeller

Alla modeller i Mage / Eav / Model / Resource är Mysql4 och är resursmodeller.

Dessutom Entity / Abstract.php och Entity / Setup.php.

Flat kontra EAV

EAV-modellerna är mer komplexa och ger logik för att spara och ladda från flera tabeller, medan platt- eller standardmodellerna är relativt enkla (traditionella).

Standardmodeller hanterar huvudsakligen sina egenskaper med datainställare och brevet som arbetar med en enda tabell. EAV-modeller hanterar huvudsakligen sina attributmodeller. Standardmodeller sparar bara sina data i en tabell och laddar dem. EAV-modeller laddar alla (eller en specifik uppsättning) attribut efter laddning av basdata och sparar attribut efter att spara data (inklusive infoga, uppdatera och radera attribut).

Exempel på resursmodell för EAV

För att hitta enheter som använder EAV-lagringsschemat som söker efter strängen sträcker sig Mage_Eav_Model_Entity_Abstract kan användas. Detta bör avslöja alla resursmodeller baserade på EAV-strukturen. Den resulterande listan kommer dock att innehålla många föråldrade klasser från Mage_Sales-modulen som inte längre används.

De enda modulerna som innehåller enheter som använder EAV-lagringsschemat är Mage_Catalog (kategorier och produkter) och Mage_Customer (kunder och adresser).

Kundgrupper använder schema för plattbordslager. Alla försäljningsenheter konverterades till plattbordsenheter med lanseringen av Magento 1.4.

Anledningen till att EAV används är så att enheter kan ha ett obestämt antal egenskaper och därför förbli flexibla. När du till exempel lägger till ett nytt attribut till en kundenhet (som är en EAV-enhet) behöver databastabellen inte ändras för att detta nya attribut ska läggas till.

fördelar

Schema för flexibilitetsdatabas behöver inte ändras med modellen Snabb att implementera

nackdelar

  • Ineffektiv

En fråga som returnerar 20 kolumner normalt skulle bestå av 20 självförbindelser i EAV. Men Mage_Eav-modulen använder i allmänhet inte joins för att ladda data om attributvärden. Istället används fackväljare. Skarvar används endast för att filtrera EAV-samlingar.

  • Ingen mekanism för förhållanden mellan subtyper
  • Ingen gruppering av entitytyper

Webbplats och butikens omfattning

För att hantera webbplatsens och lagra omfattningsattributvärden inom EAV finns ett store_id-värde i katalogenheten för att visa omfattning som länkar tillbaka till core_store. Tillsammans med de normala butikerna (butiksvyer) finns det också en butik '0' som är det globala värdet. När du är i en viss butik kommer systemet först att kontrollera om det finns ett enhetsvärde på den aktuella butiken och sedan falla tillbaka till den globala enheten. Mage_Customer EAV-enheter har inte en kolumn store_id scope.

Infoga, uppdatera och radera

För att avgöra om en infogning, uppdatering eller radering behöver utföras på ett attribut görs en jämförelse mot det ursprungliga objektet. Det ursprungliga objektet är i princip ett duplikat av dataobjektet när enheten hämtades från databasen.

  • Om attributet finns ursprungligen och dess nya värde inte är tomt; det uppdateras.
  • Om attributet finns ursprungligen men det nya värdet är satt till tomt; det raderar. - Om attributet inte finns ursprungligen och dess nya värde inte är tomt; den sätter in.

Attributhantering

Attributmodeller

Attributmodell Representerar attributet i databasformen, dess logik är standard över alla attribut och är svår att ändra .

Frontend-modell

Attributets gränssnitt till frontend och ger all logik som attributet kräver på frontend, t.ex. getUrl () -metoden på bilder.

Backend-modell

Dessa utför validering på attributet innan det sparas i databasen. Till exempel konverterar lösenordets backendmodell lösenordet till en hash innan det sparas. Den kontrollerar också att lösenordet och lösenordbekräftelsen matchar innan du sparar.

Källmodeller

Används för att fylla de tillgängliga alternativen för ett attribut, t.ex. katalog / produkt_status har aktiverat och inaktiverat.

Obligatoriska metoder

En källmodell kräver:

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

Vanligtvis behöver endast getAllOptions () implementeras men eftersom en implementering för getOptionText () redan finns i den abstrakta källmodellen Mage_Eav_Model_Entity_Attribute_Source_Abstract.

En frontendmodell kräver inte metoden getValue ().

En backendmodell kräver:

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

Alla dessa metoder implementeras i den abstrakta backendmodellen Mage_Eav_Model_Entity_Attribute_Backend_Abstract. För anpassade backendmodeller behöver endast de metoder som kräver anpassning åsidosättas.

Systemkonfigurationskällmodeller

Kan inte användas för EAV-attribut. EAV-källmodeller implementerar getAllOptions-metoden medan adminhtml-källmodeller implementerar metoden toOptionArray ().

Standard systemkonfigureringskällmodeller finns i Mage / Adminhtml / Model / System / Config / Source /.

Attribut Källmodeller

Syftet med attributkällmodeller är att tillhandahålla listan med alternativ och värden för att välja och att välja flera attribut. De tillhandahåller också kolumninformationen till katalogen platt tabellindexer om det behövs.

Gör följande för att få en lista med alla alternativ för ett attribut:

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

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

Standardattributmodeller

Om ingen klass anges som frontend, backend eller - för att välja eller att välja flera attribut - källmodeller används en standardklass.

Standardattributets frontendmodell är Mage_Eav_Model_Entity_Attribute_Frontend_Default.

Standardattendemodellen för attribut beror på attributkoden och bestäms i metoden 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();
    }
?>

Om metoden faller till den sista raden används Mage_Eav_Model_Entity_Attribute_Backend_Default.

Standardkällmodellen är inställd i Mage_Eav_Model_Entity_Attribute_Source_Table. Detta anges i attributmodellen för katalogmodulerna. Den standardkonfigurerade källmodellen som anges i eav-modulen används aldrig.

Lägg till attribut

För att lägga till EAV-attribut använder du Mage_Eav_Model_Entity_Setup genom att utöka i installationsklassen.

addAttribute () Skapar attributen, lägger till dem i grupper och uppsättningar (inklusive standard) eller uppdaterar om det redan finns updateAttribute () Uppdaterar endast attributdata. Anpassade inställningsklasser kan användas för att utöka dessa metoder, lägga till ytterligare data eller förenkla de nödvändiga argumenten.

Platta bord

Plattskatalogattribut hanteras av indexörer:

Mage_Catalog_Model_Resource_Product_Flat_Indexer :: updateAttribute () Mage_Catalog_Model_Resource_Category_Flat :: synkronisera () Produktattribut läggs till i den platta tabellen om de är (se Mage_Catalog_Model_Resource_Product_Flat_Indexer :: getAribute:)

Statisk (backendtyp) Filtrerbar Används i produktlistan Används för kampanjregler Används för att sortera efter Systemattribut Det finns ett annat platt bord för varje butik, var och en har ett annat attributvärde för butiks-scoped-enheter. Flerspråkiga värden hanteras genom att ha olika butiker för varje språk.

implementera gränssnittet för attributen frontend-, käll- och backend-modeller

Frontend-gränssnitt

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

}

Källgränssnitt

/**
* 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-gränssnitt

/**
* 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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow