ORM簡單的表達就是:外部輸入的東西,所有能夠自動映射到數據庫裏面。實現這樣一個思路,就須要對輸入到數據庫表單和字段所有有個讀取緩存(通常都會有一個緩衝文件用來儲存對應的數據表和對應的基本字段信息)
show tables ; 列出全部數據表
$result = mysql_query("show tables");
$tables = mysql_fetch_array($result,MYSQL_ASSOC);
講數據表所有導入到一個數組裏面。對於每一個數據庫表
而後讀取每一個數據表的columns,並放入$tmp['Field'](字段的屬性包括字段名,類型,是否爲空,默認值,是不是主鍵,自動遞增)
儲存爲一個$array[$field]的數組函數
foreach($tables as $val) {
$sql = "show columns from $val";
$res1 = mysql_query($sql);
while ($tmp=mysql_fetch_array($res1,MYSQL_ASSOC)){
$array[$tmp['Field']] = array(
'name' => $tmp['Field'],
'type' => $tmp['Type'],
'null' => $tmp['Null'],
'default' => $tmp['Default'],
'primary' => (strtolower($tmp['Key']) == 'pri'),
'autoinc' => (strtolower($tmp['Extra']) == 'auto_increment'),
);
}
}
將所有信息組成一個三維數組array($tablename=>array($fieldname=>array("name"=>$fieldname)))。
拿到了數據表所有的數組和對應的字段信息後,就能夠開始進行ORM類型操做。
能夠進行的操做包括:
1.數據插入前的字段檢測(檢測插入某個對應的數據庫是否是所屬字段,將多餘的不是表的字段過濾掉)
2.實例化數據操做好比Model("test")這種的時候,沒有找到對應的類,能夠直接進行的操做進行統一封裝。好比M('test')->add($arr) 這種格式
能夠自動進行的操做是檢測數組裏包含的字段 插入數據表裏面(若是是D('test')這種會優先讀取指定model路徑裏面進行實例化,而後調用對應的方法類。
能夠將不少基本的動做比CURD類的基本操做(能夠直接操做數據表,並且是單表的操做)能夠用一些特定的方法進行封裝(TP就是利用這種思想進行封裝的)
這樣大幅度的增長了開發的效率。
3.能夠將該表存在緩存裏面,能夠快速的相應一些數據庫信息的查詢
ORM還有另一個巨大的好處,能夠直接建立對應的數據表後,能夠直接調用基本方法,這樣設計數據數據表的時候,有着很是好的拓展性。
定義數據表的功能能夠直接移植到系統後臺,大幅度增長應用場景的靈活性。也能夠直接從後臺導出
例如:
mysql
show create table test1; (會顯示table和建立該table須要的語句)sql