## 数据库查询与模型查询对比 #### 1. 静态查询是最基本的,也最具代表性。 >[info] 本节以数据库与模型静态查询来对比一下二者的区别,来结束本章的学习~ * * * * * #### 2. 二者查询上的区别: 1. 数据库查询:需要在查询之前设置数据表; 2. 模型查询:因为已经与数据表绑定,所以不需要事先设置数据表; 3. 数据库查询:直接返回一维数组或者二维数组(表中原始数据); 4. 模型查询:返回数据对象,原始数据保存在属性$data数组中; 5. 数据库查询:直接调用连贯方法生成SQL语句进行查询; 6. 模型查询:通过魔术方法间接调用数据库方法完成查询。 * * * * * #### 3. 我们用实例来对比二者之间查询方式的区别 * 创建模型类:/application/index/mode/Staff.php ~~~ <?php namespace app\index\model; //导入模型类 use think\model; class Staff extends model { //自定义模型类代码 } ~~~ **任务** :查询年龄age>50,工资低于9000的员工信息(要涨工资了吗?) * 我们先看一下要查询的结果是什么? ![](https://box.kancloud.cn/d56d8fe634ec67151a2de4e250d21e10_663x308.png) * 控制器:/application/index/controller/Index.php ~~~ <?php namespace app\index\controller; //导入模型类 use think\Db; use app\index\model\Staff; class Index { public function index(){ //设置查询条件 $map = []; $map['age'] = ['>',50]; $map['salary'] = ['<',9000]; //数据库静态查询:返回结果集【二维数组】 $result1 = Db::table('tp5_staff')->where($map)->select(); //模型静态查询:返回结果集【数据对象数组】 $result2 = Staff::where($map)->select(); //输出数据库方式获取的结果集 dump($result1); //模型查询结果是对象数组,必须用循环来遍历 foreach ($result2 as $data){ //获取数据对象原始数据 dump($data -> getData()); } } } ~~~ * 查询结果: ~~~ //数据库静态查询结果 array(2) { [0] => array(7) { ["id"] => int(1004) ["name"] => string(9) "小龙女" ["sex"] => int(0) ["age"] => int(63) ["salary"] => float(2990) ["dept"] => int(2) ["hiredate"] => string(10) "2010-01-20" } [1] => array(7) { ["id"] => int(1024) ["name"] => string(9) "鲁大师" ["sex"] => int(0) ["age"] => int(60) ["salary"] => float(1300) ["dept"] => int(2) ["hiredate"] => string(10) "2012-09-09" } } //模型静态查询结果,已用getData()方法处理过 //下面是查询到的原始数据:二维数组 array(7) { ["id"] => int(1004) ["name"] => string(9) "小龙女" ["sex"] => int(0) ["age"] => int(63) ["salary"] => float(2990) ["dept"] => int(2) ["hiredate"] => string(10) "2010-01-20" } array(7) { ["id"] => int(1024) ["name"] => string(9) "鲁大师" ["sex"] => int(0) ["age"] => int(60) ["salary"] => float(1300) ["dept"] => int(2) ["hiredate"] => string(10) "2012-09-09" } ~~~ >[warning] 可以看出:二者查询结果完全一致 * * * * * #### 4. 总结 >[success] 如果仅是简单的增、删、改、查操作,数据库查询完全可以满足要求。如果涉及到字段验证或复杂逻辑,必须要用模型来解决。实际上在开发,我们要坚持始终用模型操作数据库,以应对复杂多变的开发需求。