Benim tahminim, geliştiricilerin "genel" varlıkları / modelleri uygulamalarının bir kısmı miras ve bir "kolaylık" kalıbı olduğudur.
Belirttiğiniz gibi, ilgili tablolar genellikle boştur. Bunun nedeni, çekirdek EAV varlıklarının hiçbirinin bu "varsayılan" varlık tablosu yapısını kullanmamasıdır. Bunlar 1.8 kurulumundaki varlık tablolarıdır:
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)
Örnek olarak Müşteri modeli kullanarak, kaynak modeli olduğunu görebilirsiniz Mage_Customer_Model_Resource_Customer
uzanır Mage_Eav_Model_Entity_Abstract
, Kaynak .
Not : 1.6'dan önce müşteri kuruluşu için kaynak modeli Mage_Customer_Model_Entity_Customer
de genişletilmiştir Mage_Eav_Model_Entity_Abstract
, Kaynak .
Mage_Eav_Model_Entity_Abstract
Sınıfı incelersek bir getEntityTable
yöntem buluruz . Bu yöntem, yaygın CRUD işlemleri sırasında sorgular oluştururken hangi tablonun kullanılacağını belirlemek için kullanılır. İlgilenilen başka bir yöntem getValueTablePrefix
. Bu veriler "tip" tabloları için masalar öneki belirler *_datetime
, *_decimal
, *_varchar
ve böyle devam eder.
Bu yöntemlerin ( burada ve burada ) kaynağına bakmak .
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;
}
Yukarıdaki yöntemde, varlık türü varsayılan olarak özel bir tablo tanımlamazsa görebiliriz Mage_Eav_Model_Entity::DEFAULT_ENTITY_TABLE
. Bu sabitin değeri 'eav/entity'
, eav_entity
tabloya dönüştürülür (uygulamada yapılandırılmış tablo öneki olmadığı varsayılarak). Bahsettiğim ikinci yöntem, belirtilen varlık için hiçbiri yapılandırılmadıysa bu tabloya önek olarak geri döner. eav_entity_type
Tablodaki değerleri value_table_prefix
sütun için incelerseniz bunların hepsinin olduğunu göreceksiniz 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;
}
Yöntemdeki mantık oldukça basittir, herhangi bir değer öneki tanımlanmamışsa varlık tablosu adını önek olarak kullanın.
Bu tabloların Magento'da çok uzun süre bulunduğundan, bunları geriye doğru uyumluluk için onları açık bir şekilde kaldırmaktan daha iyi bırakacağını varsayıyorum. Onların gittiklerine inanıyorum, diğer geliştiricilerin sadece birkaç sınıfı genişletebileceği ve yönetici aracılığıyla değiştirilebilecek bu "dinamik" özelliklere sahip olabileceği kullanımı kolay bir varlık / model yapısıydı (katalog ürünlerine ve müşteri modellerine bakın). Maalesef, söz konusu modelin uygulanması ve uygulanması iyi ölçeklenmemiş gibi görünüyor ve sorunlara yol açıyor. Muhtemelen belgeleme ve örnek kullanım durumları veya düşük performans nedeniyle, bu yapıyı vahşi doğada hiç görmedim.
Ben çekirdek geliştirici (veya arkeolog) değilim ama kod ve veri yapılarından topladığım şey, umarım biraz ışık tutmaya yardımcı olur.