日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發布時間:2024/1/1 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。