## 数据库查询与模型查询对比
#### 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] 如果仅是简单的增、删、改、查操作,数据库查询完全可以满足要求。如果涉及到字段验证或复杂逻辑,必须要用模型来解决。实际上在开发,我们要坚持始终用模型操作数据库,以应对复杂多变的开发需求。
- 前言[随时更新]
- 开发环境
- 1.Mac环境
- 2.windows环境
- 模型对象
- 1.创建模型对象
- 2.模型初始化
- 数据对象
- 1.定义数据对象
- 2.创建数据对象
- 1.data方法
- 2.setAttr方法
- 3.__set方法
- 4.查询数据对象
- 1.getData方法
- 2.getAttr方法
- 3.__get方法
- OOP难点总结
- 1.get_class( )实例讲解
- 2.get_called_class( )实例讲解
- 3.__call( )实例讲解
- 3.__callStatic( )实例讲解
- 4.call_user_func_array函数[重点]
- 5.普通方法与静态方法
- 6.在Model源码中的应用
- 7.new static 延迟静态绑定
- PHP标准化规范
- 查询数据
- 1.获取单条:get静态方法
- 2.获取单条:对象查询
- 3.获取多条:all静态方法
- 4.获取多条:对象查询
- 5.获取字段值:value方法
- 6.获取列值:column方法
- 7.动态查询:getBy字段名
- 8.助手函数:model查询
- 9.加载器:Loader类查询
- 10.数据库与模型查询对比
- 新增数据
- 1.sava方法
- 2.savaAll方法
- 3.create静态方法
- 4.insert静态调用
- 更新数据
- 1.单条更新:save方法
- 2.批量更新:saveAll方法
- 3.静态更新:update方法
- 4.查询类Query直接更新
- 5. 闭包更新
- 删除数据
- 1.删除当前记录:delete
- 2.静态条件删除:destory
- 获取器
- 1.模型方法:set属性Attr
- 修改器
- 1.set属性Attr
- 时间戳
- 1.MySQL中日期类型复习
- 2.时间戳功能详解
- 软删除[重点]
- 1.traits详解[选学内容]
- 2.SoftDelet类源码分析
- 3. delete实例删除
- 4.destroy条件删除
- 5.restore恢复数据
- 类型转换
- 1. 规则设置
- 2. 实例演示
- 查询范围
- 1. 基本概念
- 2.实例演示