博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Magento--给EAV模型新增非EAV属性
阅读量:6857 次
发布时间:2019-06-26

本文共 1409 字,大约阅读时间需要 4 分钟。

这其实是个老话题,什么叫EAV模型的非EAV属性,以用户为例,添加EAV属性对用户主表(customer_entity)的结构没有改变,而所谓的非EAV属性,是指直接给customer_entity表新增物理字段。需要注意的是,在Magento的架构里,EAV类型对象(用户),直接给主表新加的字段是没办法通过常规的对象操作进行读写的,不过不用担心,Magento其实考虑到了这种需求,怎么处理请看下面的示例代码:

$installer = $this;$installer->startSetup();$installer->run("ALTER TABLE `{$installer->getTable('customer/entity')}` ADD `mobile` VARCHAR(255) NULL DEFAULT NULL AFTER `email`;");$mobile = 'mobile';$installer->addAttribute('customer', $mobile, array(    'type'      => 'static',    'label'     => 'Mobile',    'input'     => 'text',    'backend'   => '',    'position'  => 80,    'required'  => false));$mobileAttribute = Mage::getSingleton('eav/config')->getAttribute('customer', $mobile);$mobileAttribute->setData('used_in_forms',    array('customer_account_edit','customer_account_create','adminhtml_customer','checkout_register'));$mobileAttribute->save();

以给用户新增手机号属性为例,以上代码跟新增一个EAV属性的区别在于,一,mobile是直接加在主表的新字段(第一段代码),二,mobile属性的type是static,这里的static就是注明了这个mobile属性是一个静态属性(主表的一个字段)(第二段代码)。第三段代码是用户实体独有的,从代码字面意思就很好理解,标记这个新属性可用在哪些表单('customer_account_edit','customer_account_create','adminhtml_customer','checkout_register')。

回过头来说,什么情况下适合加静态属性而不是加EAV属性呢,我个人理解是,还是以手机号字段为例,现在很多国内的网站都同时支持“用户名/邮箱/手机号”任选一登录,那么手机号字段就会需要有唯一性,并且会在一些业务流程中作为筛选用户的过滤条件,这种情况下,传统的eav字段会使数据库进行大量的表连接操作,给数据库带来不小的压力。当然反过来说,有些新增的属性就适合eav类型,比如某个属性只会用来做显示,那么即便是eav类型,因为都是根据主键取单条数据,表连接也不会给数据库有多少压力,都加到主表会让主表变的臃肿。这里面的度的掌握就看各自根据实际情况摸索了。

转载地址:http://xliyl.baihongyu.com/

你可能感兴趣的文章
如何使用Dilworth定理
查看>>
7.11 求总和的百分比
查看>>
Python入门
查看>>
《CLR via C#》读书笔记 之 类型基础
查看>>
WPF中RadioButton的分组
查看>>
JavaScript new对象的四个过程
查看>>
Docker的Mysql数据库:把数据存储在本地目录
查看>>
javascript 判断是否是PC还是手机端
查看>>
存储过程起步
查看>>
【转】Linux常用命令
查看>>
动量法应用NASA测试不同飞机机翼噪音
查看>>
广搜,深搜,单源最短路径,POJ(1130),ZOJ(1085)
查看>>
简单深搜
查看>>
HDU 3625 第一类斯特林数
查看>>
HDU 5726 GCD
查看>>
ACM-ICPC(10 / 9)
查看>>
GIT在windows下搭建
查看>>
shell编程系列26--大型脚本工具开发实战
查看>>
如何改变PMO在组织中的尴尬处境的?
查看>>
sys.argv[]
查看>>