# 数据库模型
本系统中最常用的三种方法: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')是等效的
~~~