亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Magento數據庫結構:EAV

系統 1914 0

Magento的表有三百多張,以實體、屬性、值(EAV)的數據庫結構難以掌握,加上缺少有關EAV的文檔,以至許多人不知道這種EAV方式的好處以及它對magento來說的重要性,在這里作為一名magento開發者,讓我們來了解下,它是如何工作的并且對我們有什么好處。

?

什么是EAV呢?

EAV是實體(Entity)、屬性(Attribute)、值(Value)的意思,接下來來看看每一部分以便更好的理解它。

?

實體(Entity)

實體指的是magento的數據對象,如產品、分類目錄、客戶、訂單等,每一個實體在數據庫中都對應著一條實體記錄。

?

屬性(Attribute)

屬性是指跟實體相關的一些性質數據,如產品實體有名稱、價格、狀態等。

?

值(Value)

值是最容易理解的了,就是指屬性的值了。

?

EAV是怎么工作的呢?

一直以來,數據庫其實很簡單的,比如我們現在要設計一個商城,需要有一張產品表,包括所有產品的信息,另一張表包括分類信息,也許還要一張表來連接這兩張,這樣很容易理解吧,然而magento卻不一樣,它跟產品以及分類有關的表有40多張,要想知道為什么,讓我們來看下產品表。

?

不像其它的商城那樣,所有的產品信息在一張表里,magento把產品信息分離在子表中,最頂上的表是catalog_product_entity,如果你看過這張表,你肯定發現了,它只包括產品的一些基礎信息,除了SKU,其它你看不到任何有用的信息,幸運地是使用這張表你將可以從屬性和值表中看到完整的產品記錄。

?

讓我們開始新建一條完整的產品記錄,你需要將屬性與我們的實體表相關聯,做這之前先看下表eav_attribute,這張表在magento里為所有不同的實體存儲了所有的屬性,打開表,你會看到里面有好幾百條不同屬性的記錄,為什么有些名稱還是一樣的呢?困惑吧?magento是如何辨別的呢?很快你就會注意到entity_type_id,每一個實體都會有一個entity_type_id,為了找出來,那就再回來catalog_product_entity表,看entity_type_id字段,你會發現所有的記錄值都是10,如果你有去看catalog_category_entity,你將會看到一個不同的entity_type_id值。根據這個值和attribute code你就可以找到所有產品的屬性,當然也可以所有其它實體的屬性了。

?

思考下下面的查詢:

    # 找出所有產品的屬性
SELECT attribute_code FROM eav_attribute WHERE entity_type_id = 10;
  

?

    # 找出單個產品的屬性 
SELECT attribute_code FROM eav_attribute WHERE entity_type_id = 10 AND attribute_code = 'name'; 
  
?

你得到屬性和實體了吧。接下來了解下值,值被分離在不同的表中,讓我們看下所有前綴是catalog_product_entity的表,值是根據它們的類型來分的,例如,所有的價格以及其它decimal屬性的會存儲在表catalog_product_entity_decimal中,另外所有文本類型數據會存儲在catalog_product_varchar中,需要指出的是每個屬性存儲的表,magento在eav_attribute表中使用字段backend_type記錄,如果你運行以下查詢,你將可以找到產品屬性'name’的backend type。

    SELECT attribute_code, backend_type FROM eav_attribute WHERE entity_type_id = 4 AND attribute_code = 'name'; 
  
?

希望以上的查詢返回的是varchar,這就是name的正確類型啦,基于以上,我們可以知道namer值被存儲在表catalog_product_entity_varchar中,你認為下面的查詢會存儲在哪呢?想一想,然后copy it看下你對了沒。

    SELECT e.entity_id AS product_id, var.value AS product_name FROM catalog_product_entity e, eav_attribute eav, catalog_product_entity_varchar varWHERE e.entity_type_id = eav.entity_type_id AND eav.attribute_code = 'name' AND eav.attribute_id = var.attribute_id AND var.entity_id = e.entity_id
  
?

為什么使用EAV呢?

使用EAV是因為它相比其它普通的數據庫結構要更容易擴展。開發者不用編輯核心數據庫結構就可以為任何實體添加屬性,并且當自定義的屬性被添加后,不需要添加任何邏輯讓magento保存它,因為這些在模型中都已經存在了,只要數據和屬性創建后,模型就會保存了。

?

EAV有什么缺點呢?

最主要的就是它的速度了,由于實體數據都是碎片式的,建立一個完整的實體記錄需要許多表聯合查詢。幸運地是Varien團隊開發了個優秀的緩存系統,允許開發者緩存那些不常改變的信息。

?

另一個問題就是學習的風險,很多開發人員學習到半途就放棄了,對于這還真沒有什么捷徑,希望我們共同征服它吧!

?

總結

實體、屬性、值是很好的一種數據庫結構,也是學習magento很關鍵的一部分,因此對于開發者來說,明白它是如何工作的就顯的十分重要了。

?

?

?

?

來源: http://www.vipinit.com/index/article-158.html

?

參考: http://www.magereverse.com/

?

?

?

Magento數據庫結構:EAV


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲高清视频在线播放 | 草莓视频在线观看精品最新 | 午夜精品亚洲 | 四虎www成人影院免费观看 | 99青青 | 亚洲精品入口一区二区在线观看 | 亚洲人jizz| 国产欧美日韩精品a在线观看 | 黄色毛片毛茸茸 | 久精品视频村上里沙 | 欧美真人毛片动作视频 | 欧美一级特黄aaa大片 | 色播性播爱播放影院 | 久久免费精品高清麻豆 | 中文字幕在线激情日韩一区 | 精品国产免费久久久久久婷婷 | 久久精品视频免费观看 | 涩涩伊人| 99re热视频精品首页 | 国产精品永久免费10000 | 亚洲网在线 | 国产亚洲精品第一区在线观看 | 精品久久国产视频 | 全黄一级裸片视频在线观看 | 桃花阁成人网在线观看 | 久久久久久久久综合影视网 | 亚洲天天在线日亚洲洲精 | 亚洲精品美女一区二区三区乱码 | 全部毛片 | 久青草视频免费视频播放线路1 | 精品国产一区二区三区香蕉沈先生 | 97视频免费人人观看人人 | 国产精品视频99 | 久久精品国产色蜜蜜麻豆 | 91视频这里只有精品 | 国产3344永久在线观看视频 | 亚洲狠狠| 国产精品久久久久免费视频 | 欧美中文字幕在线 | 91在线看片一区国产 | 97视频在线观看视频在线精品 |