ecstore mysql_详解Ecstore中的数据表结构定义文件dbschema的特殊字段 | Suvan的随性笔记...

官方目录结构对dbschema目录的解释是:

app/{$app_name}/dbschema //{$app_name}是数据库表定义文件

1

app/{$app_name}/dbschema//{$app_name}是数据库表定义文件

通过文档可以理解,在ecos安装时,会扫描相关app中的dbschema中的文件,用这个文件生成相应的表结构并创建,同时也用来定义desktop app的列表项,即finder列表及操作项。

通常情况下数据库的一个表会对应一个dbschema定义文件(数据库表定义文件)和一个model.数据库表名采用下划线命名法, 并且只允许小写字母

dbschema约定:

表名: {$db_prefix}{$app_name}_{$filename}

1

表名:{$db_prefix}{$app_name}_{$filename}

数据库表名前缀:

{$db_prefix} 系统默认为sdb_, 定义在config/config.php里

DB_PREFIX

文件名: $filename.php

存放目录名: app/{$app_name}/dbschema

完整文件名: app/{$app_name}/dbschema/{$filename}.php

对应的model类名: {$app_name}_mdl_{$filename}

所属app: {$app_name}

1

2

3

4

5

6

7

8

9

文件名:$filename.php

存放目录名:app/{$app_name}/dbschema

完整文件名:app/{$app_name}/dbschema/{$filename}.php

对应的model类名:{$app_name}_mdl_{$filename}

所属app:{$app_name}

dbschema文件内容返回的是一个数组形式,每个键值都有不同的定义,简单的例子如下:

$db['members']=array (

'columns' => array(

'ruesin_id' => //键值即是字段名称

array (

'type' => 'int(8)', // 字段类型

'pkey' => true, // 是否是主键 默认为false

'required' => true, // 不能为空 默认为false

'extra' => 'auto_increment', // 扩展值//自增//如果要用一般只使用这个即可

'comment' => app::get('b2c')->_('用户名'), //注释

'sdfpath' => 'pam_account/account_id', //保存数据时的数组格式

'label' => app::get('b2c')->_('用户名'), //显示的名称

'width' => 110, //本列的初始宽度

'searchtype' => 'has', //搜索的类型//详细可参考数据查询过滤器_filter

'filtertype' => 'normal', //高级筛选的过滤类型//设置为normal按type的来生成过滤

'filterdefault' => 'true', //默认在高级筛选中显示

'order' => 20, //在列表中的权重//越小越靠前

'in_list' => true, //是否显示在列表项中

'default_in_list' => true, //默认显示在列表项中

'is_title'=>true,

),

'member_lv_id' =>array(

'type' => 'table:member_lv@b2c', //关联b2c app下member_lv表中的主键类型

'default' => 0, // 默认值

'required' => true,

'editable' => false,

),

'status' =>array(

'default' => 'programmer',

'type' => array ( // 生成枚举类型

'programmer' => app::get('b2c')->_('小彪彪'),

'literature' => app::get('b2c')->_('盛总'),

),

'label' => app::get('b2c')->_('二把手'),

'width' => 100,

'in_list' => true,

'default_in_list' => true,

)

),

'version' => '$Rev: 44008 $' , //版本号

'engine' => 'innodb' , //mysql引擎

'comment' => app::get('b2c')->_('Ruesin的数据表'), //表描述

);

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

$db['members']=array(

'columns'=>array(

'ruesin_id'=>//键值即是字段名称

array(

'type'=>'int(8)',//字段类型

'pkey'=>true,//是否是主键默认为false

'required'=>true,//不能为空默认为false

'extra'=>'auto_increment',//扩展值//自增//如果要用一般只使用这个即可

'comment'=>app::get('b2c')->_('用户名'),//注释

'sdfpath'=>'pam_account/account_id',//保存数据时的数组格式

'label'=>app::get('b2c')->_('用户名'),//显示的名称

'width'=>110,//本列的初始宽度

'searchtype'=>'has',//搜索的类型//详细可参考数据查询过滤器_filter

'filtertype'=>'normal',//高级筛选的过滤类型//设置为normal按type的来生成过滤

'filterdefault'=>'true',//默认在高级筛选中显示

'order'=>20,//在列表中的权重//越小越靠前

'in_list'=>true,//是否显示在列表项中

'default_in_list'=>true,//默认显示在列表项中

'is_title'=>true,

),

'member_lv_id'=>array(

'type'=>'table:member_lv@b2c',//关联b2capp下member_lv表中的主键类型

'default'=>0,//默认值

'required'=>true,

'editable'=>false,

),

'status'=>array(

'default'=>'programmer',

'type'=>array(//生成枚举类型

'programmer'=>app::get('b2c')->_('小彪彪'),

'literature'=>app::get('b2c')->_('盛总'),

),

'label'=>app::get('b2c')->_('二把手'),

'width'=>100,

'in_list'=>true,

'default_in_list'=>true,

)

),

'version'=>'$Rev: 44008 $',//版本号

'engine'=>'innodb',//mysql引擎

'comment'=>app::get('b2c')->_('Ruesin的数据表'),//表描述

);

一、字段类型

系统中定义的字段类型有很多,详细可查询官方文档,这里只列出了一些比较特别的.并稍作介绍.

1.关联主键表

'type' => 'table:member_lv@b2c',

//关联b2c应用下member_lv表中的主键类型

//如果在同一app下,可省略@appname

1

2

3

'type'=>'table:member_lv@b2c',

//关联b2c应用下member_lv表中的主键类型

//如果在同一app下,可省略@appname

2.枚举类型

'type' => array (

'programmer' => app::get('b2c')->_('程序员'),

'literature' => app::get('b2c')->_('文艺青年'),

),

// 生成枚举类型 enum('programmer','literature')

// 高级搜索将产生一个select选项可以进行选择

// 在后台finder列表中,会根据查询出来的值显示出枚举出的数据

1

2

3

4

5

6

7

'type'=>array(

'programmer'=>app::get('b2c')->_('程序员'),

'literature'=>app::get('b2c')->_('文艺青年'),

),

//生成枚举类型enum('programmer','literature')

//高级搜索将产生一个select选项可以进行选择

//在后台finder列表中,会根据查询出来的值显示出枚举出的数据

3.email类型

//存在数据库中的类型是varchar(255),虽然可以直接写成mysql类型,但在这里写了email类型后,使用dbeav的save时会验证是否是email类型的数据 如果不是将抛出异常。

(跟money类型异曲同工,其实有很多类型由于在程序中我们都有验证,所以可以直接写成mysql类型的)

二、后台finder列表

1.searchtype

列表页中简单搜索的处理方式,如果dbschema中存在searchtype则会在desktop列表上显示相关的简单搜索,而searchtype的类型使用的是dbeav中的过滤器_filter类型

'than'=>' > '.$var,

'lthan'=>' < '.$var,

'nequal'=>' = \''.$var.'\'',

'noequal'=>' <> \''.$var.'\'',

'tequal'=>' = \''.$var.'\'',

'sthan'=>' <=>= '.$var,'has'=>' like \'%'.$var.'%\'','head'=>' like \''.$var.'%\'','foot'=>' like \'%'.$var.'\'','nohas'=>' not like \'%'.$var.'%\'','between'=>' {field}>='.$var[0].' and '.' {field}" in ('".implode("','",(array)$var)."') ",

1

2

3

4

5

6

'than'=>' > '.$var,

'lthan'=>' < '.$var,

'nequal'=>' = \''.$var.'\'',

'noequal'=>' <> \''.$var.'\'',

'tequal'=>' = \''.$var.'\'',

'sthan'=>' <=>= '.$var,'has'=>' like \'%'.$var.'%\'','head'=>' like \''.$var.'%\'','foot'=>' like \'%'.$var.'\'','nohas'=>' not like \'%'.$var.'%\'','between'=>' {field}>='.$var[0].' and '.' {field}" in ('".implode("','",(array)$var)."') ",

三、sdfpath

刚开始看到sdfpath时感觉有点懵逼,也不知道是哪位高人前辈命名的~~平时定义表结构,不写sdfpath也没什么问题,后来见得多了,于是有看了下dbschema里后理解了,说下自己的见解。

'name' =>

array(

'type' => 'varchar(20)',

),

'email' =>

array(

'type' => 'email',

'sdfpath' => 'connect/email',

),

1

2

3

4

5

6

7

8

9

'name'=>

array(

'type'=>'varchar(20)',

),

'email'=>

array(

'type'=>'email',

'sdfpath'=>'connect/email',

),

保存的时候,POST的数组是:

$_POST=array(

'name'=>'Ruesin',

'connect'=>array(

'email'=>'ruesin@163.com',

)

);

1

2

3

4

5

6

$_POST=array(

'name'=>'Ruesin',

'connect'=>array(

'email'=>'ruesin@163.com',

)

);

至此,数据表定义文件dbschema已经大体给介绍完了,虽然有很多详细细节没有讲解,但是结合官方文档查看即可,而本文的介绍的很多是官方文档没有明确介绍的部分,大家可以拿此文和官方文档一起学习。

创建好dbschema文件后,记得cmd update一下哦,不然是无法更新出数据表的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值