Saya selalu bertanya-tanya apa arti dari tabel:
eav_entity
eav_entity_datetime
eav_entity_decimal
eav_entity_int
eav_entity_store
eav_entity_text
Mereka selalu kosong. Mereka dibuat dalam versi sebelum 1.6 app/code/core/Mage/Eav/sql/eav_setup/mysql4-install-0.7.0.php
dan kemudian mereka dibawa ke skrip instalasi untuk versi 1.6+ /app/code/core/Mage/Eav/sql/eav_setup/install-1.6.0.0.php
Saya melihat bahwa ada model sumber daya yang terhubung ke salah satu tabel Mage_Eav_Model_Resource_Entity_Store
(mungkin ada yang lain) tetapi tidak ada yang terjadi / dengan itu.
Apakah ada gunanya tabel ini atau ini "fitur" lain yang dimulai dan tidak diterapkan seperti versi tata letak atau remah roti admin misalnya.
Jawaban:
Dugaan saya adalah bagian warisan dan pola "kenyamanan" bagi pengembang untuk menerapkan entitas / model "umum".
Seperti yang telah Anda nyatakan, tabel terkait biasanya kosong. Alasannya adalah bahwa tidak ada entitas EAV inti yang menggunakan struktur tabel entitas "default" ini. Ini adalah tabel entitas dari instalasi 1.8:
Menggunakan model Pelanggan sebagai contoh, kita dapat melihat bahwa model sumber daya
Mage_Customer_Model_Resource_Customer
meluasMage_Eav_Model_Entity_Abstract
, Sumber .Catatan : Sebelum 1.6 model sumber daya untuk entitas pelanggan
Mage_Customer_Model_Entity_Customer
juga diperluasMage_Eav_Model_Entity_Abstract
, Sumber .Jika kita memeriksa
Mage_Eav_Model_Entity_Abstract
kelas kita menemukangetEntityTable
metode. Metode ini digunakan untuk menentukan tabel mana yang akan digunakan ketika membangun kueri selama operasi CRUD umum. Metode lain yang menarik adalahgetValueTablePrefix
. Hal ini menentukan awalan untuk tabel data "jenis" meja,*_datetime
,*_decimal
,*_varchar
dan sebagainya.Mengintip sumber untuk metode tersebut (di sini dan di sini ).
Dalam metode di atas kita dapat melihat bahwa jika tipe entitas tidak mendefinisikan tabel kustom itu defaultnya
Mage_Eav_Model_Entity::DEFAULT_ENTITY_TABLE
. Nilai konstanta itu adalah'eav/entity'
, yang pada gilirannya akan berubah menjadieav_entity
tabel (dengan asumsi tidak ada awalan tabel yang dikonfigurasi dalam aplikasi). Metode kedua yang saya sebutkan jatuh kembali pada tabel ini sebagai awalan jika tidak ada yang dikonfigurasi untuk entitas yang diberikan. Jika Anda memeriksa nilai dalameav_entity_type
tabel untukvalue_table_prefix
kolom Anda akan melihat bahwa semuanyaNULL
.Logika dalam metode ini agak sederhana, jika tidak ada nilai awalan yang didefinisikan menggunakan nama tabel entitas sebagai awalan.
Saya berasumsi bahwa karena tabel-tabel ini sudah ada di Magento sejak lama, yang terbaik adalah membiarkannya untuk kompatibilitas mundur daripada menghapusnya langsung. Gagasan yang saya yakini akan mereka gunakan adalah struktur entitas / model yang mudah digunakan sehingga pengembang lain hanya dapat memperluas beberapa kelas dan memiliki atribut "dinamis" yang dapat diubah melalui admin (lihat katalog produk dan model pelanggan). Sayangnya implementasi dan praktik pola tersebut tampaknya tidak berkembang dengan baik dan menyebabkan masalah. Saya belum pernah melihat struktur ini digunakan di alam, mungkin karena kurangnya dokumentasi dan contoh kasus penggunaan atau kinerja yang buruk.
Saya bukan pengembang inti (atau arkeolog), tetapi itulah yang saya kumpulkan dari struktur kode dan data, semoga ini membantu menjelaskan.
sumber
Pertimbangkan sedikit kode ini dalam model sumber daya EAV dasar.
Metode ini mengambil nama tabel entitas dasar yang akan digunakan untuk penyimpanan. Jadi, untuk model sumber daya produk, metode ini akan kembali
catalog_product_entity
(dengan asumsi tidak ada awalan nama tabel yang telah ditetapkan)Empat baris ini adalah yang paling terbuka.
Jika entitas tidak memiliki set tabel, konstanta berikut digunakan
Ini
eav/entity
string yang kemudian digunakan untuk mencari nama tabelYang memetik nama tabel dari konfigurasi.
Ah ha! Jika jenis entitas eav tidak memiliki set nama tabel, maka Magento akan menggunakan
eav_entity
tabel sebagai lokasi penyimpanan default.Tim teknik Magento asli terpikat pada konsep EAV - sementara Magento modern telah meningkatkan ini, model EAV adalah solusi yang lebih disukai untuk banyak masalah.
Tampaknya masuk akal untuk berasumsi / berspekulasi implementasi EAV pra-rilis awal menyimpan semua data dalam
eav_entity
tabel tipe pusat ini (pola umum dalam platform perusahaan), dan tipe entitas muncul kemudian.Kemungkinan lain (meyakinkan) adalah fitur ini dimaksudkan untuk mengaktifkan model CRUD "tableless". Secara teori, akan mungkin untuk memasukkan informasi jenis EAV yang benar, mengatur kelas model / sumber daya / pengumpulan Anda, dan menyimpan data dalam
eav_entity
tabel ini . Langkah Magento menjauh dari EAV, dan fokus pasca-peluncuran pada tim teknik pada fitur pengguna akhir berarti fitur ini memudar menjadi kabut. Walaupun saya ingin tahu apakah ini berhasil, saya tidak ingin bergantung padanya karena ini bukan jalur kode yang mendapat banyak perhatian, dan diragukan bahwa TAF mencakup penggunaannya.sumber
Magento menggunakan model data yang disebut "Nilai Atribut Entitas" untuk sebagian besar fungsinya (pelanggan, produk, dll.). Inilah yang memungkinkan atribut dinamis dalam sistem tanpa harus merestrukturisasi dan mengubah tabel dengan cepat. EAV Di Wikipedia
sumber