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一下哦,不然是無法更新出數據表的。
總結
以上是生活随笔為你收集整理的ecstore mysql_详解Ecstore中的数据表结构定义文件dbschema的特殊字段 | Suvan的随性笔记...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全国大学生电子设计竞赛综合测评——常用电
- 下一篇: linux cmake编译源码,linu