Ich vermute, es ist Teil des Erbes und ein "Bequemlichkeitsmuster" für Entwickler, "generische" Entitäten / Modelle zu implementieren.
Wie Sie angegeben haben, sind die zugehörigen Tabellen normalerweise leer. Der Grund dafür ist, dass keine der EAV-Kernentitäten diese "Standard" -Entitätstabellenstruktur verwendet. Dies sind die Entitätstabellen aus einer 1.8-Installation:
mysql> select distinct(entity_table) from eav_entity_type;
+-------------------------+
| entity_table |
+-------------------------+
| customer/entity |
| customer/address_entity |
| sales/order |
| sales/order_entity |
| catalog/category |
| catalog/product |
| sales/quote |
| sales/quote_address |
| sales/quote_entity |
| sales/quote_item |
| sales/invoice |
+-------------------------+
11 rows in set (0.00 sec)
Am Beispiel des Kundenmodells können wir sehen, dass sich das Ressourcenmodell Mage_Customer_Model_Resource_Customer
erweitert Mage_Eav_Model_Entity_Abstract
, Quelle .
Hinweis : Vor dem 1.6 das Ressourcenmodell für die Kunden Unternehmen wurde Mage_Customer_Model_Entity_Customer
die ebenfalls erweitert Mage_Eav_Model_Entity_Abstract
, Quelle .
Wenn wir die Mage_Eav_Model_Entity_Abstract
Klasse untersuchen, finden wir eine getEntityTable
Methode. Mit dieser Methode wird bestimmt, welche Tabelle beim Erstellen von Abfragen bei allgemeinen CRUD-Operationen verwendet werden soll. Eine andere Methode, die von Interesse ist, ist getValueTablePrefix
. Er bestimmt das Präfix für die Tabellen für Daten „Typ“ Tabellen *_datetime
, *_decimal
, *_varchar
und so weiter.
Ein Blick in die Quelle für diese Methoden ( hier und hier ).
public function getEntityTable()
{
if (!$this->_entityTable) {
$table = $this->getEntityType()->getEntityTable();
if (!$table) {
$table = Mage_Eav_Model_Entity::DEFAULT_ENTITY_TABLE;
}
$this->_entityTable = Mage::getSingleton('core/resource')->getTableName($table);
}
return $this->_entityTable;
}
In der obigen Methode wird angezeigt, dass der Entitätstyp standardmäßig keine benutzerdefinierte Tabelle definiert Mage_Eav_Model_Entity::DEFAULT_ENTITY_TABLE
. Der Wert dieser Konstante wird 'eav/entity'
wiederum in die eav_entity
Tabelle umgewandelt (vorausgesetzt, die Anwendung enthält kein konfiguriertes Tabellenpräfix). Die zweite von mir erwähnte Methode greift auf diese Tabelle als Präfix zurück, wenn für die angegebene Entität keine konfiguriert wurde. Wenn Sie die Werte in der eav_entity_type
Tabelle für die value_table_prefix
Spalte untersuchen, werden Sie feststellen, dass sie alle sind NULL
.
public function getValueTablePrefix()
{
if (!$this->_valueTablePrefix) {
$prefix = (string)$this->getEntityType()->getValueTablePrefix();
if (!empty($prefix)) {
$this->_valueTablePrefix = $prefix;
/**
* entity type prefix include DB table name prefix
*/
//Mage::getSingleton('core/resource')->getTableName($prefix);
} else {
$this->_valueTablePrefix = $this->getEntityTable();
}
}
return $this->_valueTablePrefix;
}
Die Logik in der Methode ist ziemlich einfach, wenn kein Wertpräfix definiert ist, verwenden Sie den Namen der Entitätstabelle als Präfix.
Ich nehme an, dass es das Beste ist, diese Tabellen aus Gründen der Abwärtskompatibilität zu belassen, als sie sofort zu entfernen, da sie schon so lange in Magento sind. Die Idee, für die sie sich entschieden haben, war meines Erachtens eine benutzerfreundliche Entity / Model-Struktur, die andere Entwickler einfach um einige Klassen erweitern konnten und über diese "dynamischen" Attribute verfügten, die über den Administrator geändert werden konnten (siehe Katalogprodukte und Kundenmodelle). Leider scheint die Implementierung und Praxis dieses Musters nicht gut zu skalieren und führt zu Problemen. Ich habe diese Struktur noch nie in freier Wildbahn gesehen, wahrscheinlich aufgrund fehlender Dokumentation und fehlender Anwendungsbeispiele oder mangelnder Leistung.
Ich bin kein Hauptentwickler (oder Archäologe), aber das ist es, was ich aus dem Code und den Datenstrukturen zusammengetragen habe.