Magento--给EAV模型新增非EAV属性

简介:

这其实是个老话题,什么叫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类型,因为都是根据主键取单条数据,表连接也不会给数据库有多少压力,都加到主表会让主表变的臃肿。这里面的度的掌握就看各自根据实际情况摸索了。

目录
相关文章
|
9月前
|
数据可视化 IDE 开发工具
CodeWave智能开发平台--03--目标:应用创建--01模板创建依赖问题修改
CodeWave智能开发平台--03--目标:应用创建--01模板创建依赖问题修改
|
存储 定位技术 Windows
《ArcGIS Engine+C#实例开发教程》第八讲 属性数据表的查询显示
原文:《ArcGIS Engine+C#实例开发教程》第八讲 属性数据表的查询显示 第一讲 桌面GIS应用程序框架的建立 第二讲 菜单的添加及其实现 第三讲 MapControl与PageLayoutControl同步 第四讲 状态栏信息的添加与实现 第五讲 鹰眼的实现 第六讲 右键菜单添加与实现 教程Bug及优化方案1 第七讲 图层符号选择器的实现1 第七讲 图层符号选择器的实现2 第八讲 属性数据表的查询显示 摘要:这一讲中,我们将实现图层属性数据表的查询显示。
1430 0