详解Ecstore中的数据表结构定义文件dbschema

任何系统的操作无非都是对数据库的各种操作的结合,而对于ecstore的数据库操作可能与其他常见项目有些不太一样。可能有新入手的朋友会尝试在数据库中直接创建表,可是发现创建之后不能使用,那是因为ecstore的缓存机制的原因。ecstore的数据库表不是常规那种直接在数据库中操作增删表的,而是通过定义dbschema目录下的数据表文件进行定义。

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

1

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

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

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

dbschema约定:

表名: {$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}

dbschema文件内容返回的是一个数组形式,每个键值都有不同的定义,下面给出一个简单的例子加以说明.

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',           //关联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的数据表'),   //表描述

);

表字段orderby => true ,有排序功能,在后台点击时候是排序功能

如,鼠标可点击进行排序

一、字段类型

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

1.关联主键表

1

2

3

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

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

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

2.枚举类型

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类型

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}<'.$var[1],>" in ('".implode("','",(array)$var)."') ",

三、sdfpath

刚开始看到sdfpath时感觉有点***,也不知道是哪位高人前辈命名的~~平时自己做的app也很少用到,所以也没做过多注意.
后来二开order时,又看到这个,感觉好二~~~ 于是有看了下dbschema里后理解了,说下自己的见解,也给大家起点抛砖引玉的作用.

1

2

3

4

5

6

7

8

9

'name' =>

array(

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

),

'email' =>

array(

    'type' => 'email',

    'sdfpath' => 'connect/email',

),

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

1

2

3

4

5

6

$_POST=array(

    'name'=>'Ruesin',

    'connect'=>array(

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

    )

);

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

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

Ecstore 中数据表结构定义 dbschema 详解相关推荐

  1. Magento 数据表结构 EAV模型详解

    EAV : Entity - Attribute - Value的缩写,是数据库模型的一种,使用eav建模的好处是可以动态为数据模型增加或移除属性. 1.问题提出: 假设需要定义一个实体Custome ...

  2. java 修改mysql数据库表结构_MYSQL数据库表结构优化方法详解

    摘要:这篇MySQL栏目下的"MYSQL数据库表结构优化方法详解",介绍的技术点是"mysql数据库表结构.MySQL数据库.数据库表结构.MySQL.据库表结构.数据库 ...

  3. 比对两个数据库中数据表结构异同

    介绍一个工具用于对比两个数据库数据表结构异同---schema sync(官网:http://schemasync.org/) 是由python写成, 比较两个库结构的时候生成一个patch脚本和一个 ...

  4. ecstore mysql_详解Ecstore中的数据表结构定义文件dbschema

    任何系统的操作无非都是对数据库的各种操作的结合,而对于ecstore的数据库操作可能与其他常见项目有些不太一样.可能有新入手的朋友会尝试在数据库中直接创建表,可是发现创建之后不能使用,那是因为ecst ...

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

    官方目录结构对dbschema目录的解释是: app/{$app_name}/dbschema //{$app_name}是数据库表定义文件 1 app/{$app_name}/dbschema//{ ...

  6. 2导出指定表结构_大白话详解大数据hive知识点,老刘真的很用心(2)

    老刘不敢说写的有多好,但敢保证尽量用大白话把自己复习的内容详细解释出来,拒绝资料上的生搬硬套,做到有自己的了解! 01 hive知识点(2) 第12点:hive分桶表 hive知识点主要偏实践,很多人 ...

  7. mysql修改表结构例子_mysql修改表结构方法实例详解

    本文实例讲述了mysql修改表结构方法.分享给大家供大家参考.具体如下: mysql修改表结构使用ALTER TABLE语句,下面就为您详细介绍mysql修改表结构的语句写法,希望对您学习mysql修 ...

  8. oracle synonym 表结构,ORACLE SYNONYM详解

    以下内容整理自Oracle 官方文档 一 概念 A synonym is an alias for any table, view,materialized view, sequence, proce ...

  9. python中Excel表的读写改详解

    ## python中Excel中的读import xlrd#先导入xlrd模块 excel = xlrd.open_workbook('1.xls')# 打开xls文件 print(excel) # ...

最新文章

  1. 如何在家写出一份无懈可击的产品文档
  2. 怎样使用python替代shell?
  3. windows命令提示符下输入net start/stop mysql发生系统错误5,拒绝访问的解决方法
  4. librtmp分析(发送数据包处理)
  5. redhat6.5手动配置网络
  6. webstorm 运行android,Windows React Native环境搭建:webstorm+android studio 及解决热更新
  7. 7-63 情人节 (15 分)(c++stl)
  8. Understanding ASP.NET Validation Techniques
  9. 蓝桥杯 ADV-110 算法提高 温度转换
  10. zookeeper安装与测试
  11. 调查问卷java源码_2020年Java技术趋势
  12. Mac下Tomcat乱码的问题
  13. 一款基于jQuery可放大预览的图片滑块插件
  14. 网络通信基础(入门知识总结)
  15. 自动跳转网页html代码大全,网页跳转代码大全 网站直接跳转代码
  16. 常用网络端口用处归纳
  17. 2021-07-25 .NET高级班 119-直播项目专题(头像上传)
  18. 音频编码之opus(一)
  19. nginx 官方文档翻译
  20. PLSQL自动登录,记住用户名密码日常使用技巧

热门文章

  1. windows系统服务中功能介绍
  2. 唯美的古风句子——喜欢
  3. 遨游浏览器的操作技巧
  4. 使用ADB在无线模式下调试APP
  5. Type-c接口无线充电压诱骗方案
  6. 电脑能玩和平精英吗_电脑玩和平精英模拟器灵敏度这样设置无延迟,还能匹配手机?...
  7. 太焦虑了怎么办?猿辅导分享四大缓解学习焦虑的方法
  8. a标签中href的几种用法
  9. 小米手环NFC读不了卡_小米确认手环、手表之间已支持NFC公交卡相互转移|手环|公交卡|nfc|手机...
  10. 【B2G】Mozilla B2G 操作系统详解,HTML5方兴未艾