ecstore mysql_详解Ecstore中的数据表结构定义文件dbschema
任何系統的操作無非都是對數據庫的各種操作的結合,而對于ecstore的數據庫操作可能與其他常見項目有些不太一樣。可能有新入手的朋友會嘗試在數據庫中直接創建表,可是發現創建之后不能使用,那是因為ecstore的緩存機制的原因。ecstore的數據庫表不是常規那種直接在數據庫中操作增刪表的,而是通過定義dbschema目錄下的數據表文件進行定義。
官方目錄結構對dbschema目錄的解釋是: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文件內容返回的是一個數組形式,每個鍵值都有不同的定義,下面給出一個簡單的例子加以說明.$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.關聯主鍵表'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列表中,會根據查詢出來的值顯示出枚舉出的數據
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)."') ",
三、sdfpath
剛開始看到sdfpath時感覺有點***,也不知道是哪位高人前輩命名的~~平時自己做的app也很少用到,所以也沒做過多注意.
后來二開order時,又看到這個,感覺好二~~~ 于是有看了下dbschema里后理解了,說下自己的見解,也給大家起點拋磚引玉的作用.'name' =>
array(
'type' => 'varchar(20)',
),
'email' =>
array(
'type' => 'email',
'sdfpath' => 'connect/email',
),
保存的時候,POST的數組是:$_POST=array(
'name'=>'Ruesin',
'connect'=>array(
'email'=>'ruesin@163.com',
)
);
至此,數據表定義文件dbschema已經大體給介紹完了,雖然有很多詳細細節沒有講解,但是結合官方文檔查看即可,而本文的介紹的很多是官方文檔沒有明確介紹的部分,大家可以拿此文和官方文檔一起學習。
創建好dbschema文件后,記得cmd update一下哦,不然是無法更新出數據表的。
總結
以上是生活随笔為你收集整理的ecstore mysql_详解Ecstore中的数据表结构定义文件dbschema的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 对我影响最大的三位老师
- 下一篇: 基于javaweb+mysql的电影在线