数据字典用于构建类型即单层结构的分类,例如状态、分类等。常用构建方式分为常量设置、配置文件、数据库方式。数据字典参与到其他关联数据表字段时,当其自身发生改变,与之相关的字段值是需要批量进行调整的。因此可采用外键方式,使用其id作为关联。但是外键带来的隐患是当数据量大时,同步更新给数据库带来压力。因此采用程序方式批量更新。虽然本质上都是对数据库的操作,但可控性相比较而言较好。另外采用文件或常量配置的方式同样存在这种情况。综上所述,不推荐使用硬编码的方式将其写入。当然对其使用的方式,应该建立缓存以被系统其它模块正常使用。对于多层级的配置项目,使用无限分类和双向列表的方式,也是较为常见的,此处不过多涉及。
1 创建数据迁移
命令:yii migrate/create dict
文件:/console/migrations/m170522_192707_dict.php
<?php
use yii\db\Migration;
class m170522_192707_dict extends Migration
{
const TBLNAEM = '{{%dict}}';
public function safeUp()
{
$tableOptions = null;
if($this->db->driverName === 'mysql'){
$tableOptions = "CHARACTER SET utf8 COLLATE utf8_unicode_ci AUTO_INCREMENT=500 ENGINE=InnoDB";
}
$this->createTable(self::TBLNAEM, [
'id'=>$this->primaryKey(),
'name'=>$this->string(30)->notNull(),
'alias'=>$this->string(30)->notNull(),
'value'=>$this->string(30)->notNull(),
'table'=>$this->string(30)->notNull(),
'field'=>$this->string(30)->notNull(),
], $tableOptions);
}
public function safeDown()
{
$this->dropTable(self::TBLNAEM);
}
}
AUTO_INCREMENT=500 预留前400项为系统内置或备用
CREATE TABLE `dict` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
`alias` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
`value` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
`table` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
`field` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=500 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
字段解释
- name 中文名称
- aliase 英文名称,按常量方式,约定为大写方式
- value 默认值
- table 对应数据表
- field 对应表字段
数据字典
2 创建模型和CURD操作
由于字典在前后台都会使用,因此模型建立应保存到common目录下。
创建模型
CURD
3 功能设置
数据字典v1.0
可建立remark字段,为字段用法补充说明。
数据字典v1.1