# 數據庫模型
本系統中最常用的三種方法:D()方法、 M()方法、 U()方法、D方法
D是data 的首字母,參數為一個表名稱,返回的是一個數據表對象(在YzmCMS3.0以下版本中是M方法)
~~~
//實例化一個數據表對象,只傳入表名即可,以下所有操作表示在對test表進行操作
$db = D('test');
//添加內容[成功:返回自動增長的ID,失敗:false]
//$db->insert(數組);
//$db->insert(array('name'=>'姓名','sex'=>'男'));
//$db->insert(array('name'=>'姓名','sex'=>'男'), true); //第二個參數選填 如果為真值 則開啟實體轉義
//刪除內容[返回影響行數]
//$db->delete(array('id>'=>'15'));
//$db->delete(array(3,4,5), true); //第二個參數存在時,第一個參數為索引數組,批量刪除多個
//$db->delete(array('1'=>1)); //刪除所有數據
//更新內容[返回影響行數]
//$db->update(array('name'=>'姓名','sex'=>'男123'),array('id'=>'10'));
//$db->update(array('name'=>'姓名','sex'=>'aaa'),array('id'=>'10'),'1'); //第三個參數選填 如果存在,并為真值 則開啟實體轉義
//$db->update('click=click+1',array('id'=>"1")); //第一個參數不是數組,類似于更新文章點擊數的功能
//查詢內容 select方式[返回二維數組]
//$result = $db->select();
//$result = $db->field('uname,id')->select();
//$result = $db->where(array('name'=>'%php%'))->select(); //like 查詢
//$result = $db->join('`yzmcms_admin` ON yzmcms_admin.id=yzmcms_admintype.id')->where(array('id'=>'1'))->select(); //join 聯合查詢
//$result = $db->where("typeid in (1,2)")->select(); //SQL : select * from user where typeid in (1,2)
//$result = $db->where(array('name'=>'%php%'))->limit('0,5')->select(); //like 查詢
//$result = $db->where(array('name'=>'%php%'))->limit('0,5')->order('id desc')->select(); //like 查詢
//$result = $db->where(array('sex'=>'男'))->limit('0,5')->select();
//$result = $db->field('uname,id')->where(array('sex'=>'男'))->limit('0,3')->order('id desc')->select();
//$result = $db->field("sex ,count(sex),avg(height),sum(height) ")->group("sex")->having(" avg(height) >160")->select();
//$result = $db->field("sex ,count(sex) as '總個數',avg(height) as '平均身高',sum(height) as '總身高' ")->group('sex')->select();
//$result = $db->field("sex ,count(sex) as '總個數',avg(height) as '平均身高',sum(height) as '總身高' ")->group("sex")->having(" 平均身高 >160")->select();
//查詢內容 find方式[返回一維數組]
//$result = $db->find();
//$result = $db->field('uname,id')->find();
//$result = $db->where("typeid in (1,2)")->find(); //SQL : select * from user where typeid in (1,2) limit 1
//$result = $db->field('id,name,height')->where(array('sex'=>'男'))->find();
//$result = $db->join('`yzmcms_admin` ON yzmcms_admin.id=yzmcms_admintype.id')->where(array('id'=>'1'))->find(); //join 聯合查詢
//$result = $db->field('uname,id')->where(array('sex'=>'男'))->order('id desc')->find();
//查詢記錄數[返回記錄行數]
//$result = $db->total();
//$result = $db->where(array('age>'=>'12'))->total();
//$result = $db->join('`yzmcms_admin` ON yzmcms_admin.id=yzmcms_admintype.id')->where(array('age>'=>'12'))->total();
//自定義執行SQL語句 [yzmcms 代表表前綴]
//$db->query("select * from yzmcms_admin");
//獲取一維數組,一條結果
//$db->fetch_array($db->query("select * from yzmcms_admin"));
//獲取二維數組
//$db->fetch_all($db->query("select * from yzmcms_admin"));
//用于調試程序,輸入最后一條SQL語句
//$db->lastsql();
~~~
~~~
// 新增 one 方法,用來查詢某個字段的值 [返回值為字符串類型]
$res = D('admin')->field('rolename')->where(array('adminid'=>1))->one();
P($res); //運行結果 string(15) "超級管理員"
$res = D('article')->field('userid')->where(array('id'=>1))->one();
P($res); //運行結果 string(1) "1"
//新增 alias 別名方法,用于給表起別名
$admin = D('admin');
$res = $admin->alias('a')
->field('a.adminid,a.adminname,a.rolename,b.address,b.loginip,b.logintime')
->where(array('loginresult'=>1))
->join('yzmcms_admin_login_log b ON a.adminname=b.adminname', 'left')
->limit(5)
->select();
$admin->lastsql();
//最后生成的SQL為:
SELECT a.adminid,a.adminname,a.rolename,b.address,b.loginip,b.logintime FROM yzm_admin a LEFT JOIN yzm_admin_login_log b ON a.adminname=b.adminname WHERE loginresult=1 LIMIT 5
// 注意: join里的 “yzmcms_” 可表示任意的表前綴,無需修改
// 新增 事務處理
$affair = D('affair');
$affair->start_transaction(); //開啟事務
// 模擬業務流程,執行插入和更新操作
$res = $affair->insert(array('name'=>'袁志蒙','password'=>'test'));
$res2 = D('test')->update(array('name'=>'yzmcms','password'=>'123456'), array('id'=>1));
if($res && $res2){
$affair->commit(); //提交事務
}else{
$affair->rollback(); //事務回滾
}
~~~
M方法
M是model的首字母,參數為一個model類名稱,返回的是一個model類對象,意為加載并實例化本模塊下的model類br> U方法br> U是URL的首字母,返回的是一個URL字符串,意為生成URL地址
~~~
// 生成當前模塊下的當前控制器的add方法URL地址
如:U('add');
// 生成當前模塊下的test控制器的add方法URL地址
如:U('test/add') ;
// 生成admin模塊下的test控制器的add方法URL地址
如:U('admin/test/add')
說明:U('模塊名稱/控制器名稱/方法名稱')
U方法可以有第二個參數,即可傳參
如:U('admin/test/init',array('id'=>1,'status'=>1))和U('admin/test/init','id=1&status=1')是等效的
~~~