数据库查询与模型查询对比
1. 静态查询是最基本的,也最具代表性。本节以数据库与模型静态查询来对比一下二者的区别,来结束本章的学习~
2. 二者查询上的区别:数据库查询:需要在查询之前设置数据表;
模型查询:因为已经与数据表绑定,所以不需要事先设置数据表;
数据库查询:直接返回一维数组或者二维数组(表中原始数据);
模型查询:返回数据对象,原始数据保存在属性$data数组中;
数据库查询:直接调用连贯方法生成SQL语句进行查询;
模型查询:通过魔术方法间接调用数据库方法完成查询。
3. 我们用实例来对比二者之间查询方式的区别创建模型类:/application/index/mode/Staff.php<?php
namespace app\index\model;//导入模型类use think\model;class Staff extends model {//自定义模型类代码}
任务 :查询年龄age>50,工资低于9000的员工信息(要涨工资了吗?)我们先看一下要查询的结果是什么?
控制器:/application/index/controller/Index.php<?phpnamespace app\index\controller;//导入模型类use think\Db;use app\index\model\Staff;class Index { public function index(){ //设置查询条件
$map = []; $map['age'] = ['>',50]; $map['salary'] = ['
$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"}可以看出:二者查询结果完全一致
4. 总结如果仅是简单的增、删、改、查操作,数据库查询完全可以满足要求。如果涉及到字段验证或复杂逻辑,必须要用模型来解决。实际上在开发,我们要坚持始终用模型操作数据库,以应对复杂多变的开发需求。