ThinkPHP5.0框架开发--第8章 TP5.0 模型
ThinkPHP5.0框架开发--第8章 TP5.0 模型
第8章 TP5.0 模型
=================================================
今日学习
1、模型(model)
数据模型
2、新建数据模型
1) 手动新建
a、打开前台模块(C:\AppServ\www\tp5\application\index)
新建model目录
b、在model目录下 新建 User.php
// 声明命名空间
namespace app\index\model;
// 导入系统的数据模型
use think\Model;
// 声明user模型
class User extends Model{
}
2) 命令新建
1) 切换到项目目录
php think make:model app\index\model\Users
3) 注意
1、数据模型的名字 建议大家跟数据库名一致
2、如果数据库名字和模型名不一致 可以设置表名
protected $table="";
3、如果表名(yzm_user),数据模型名 (YzmUser)
3、模型的实例化
1、调用静态方法
$res=User::get(1);
dump($res->toArray());
2、实例化数据模型
$user=new User();
$res=$user::get(2);
dump($res->toArray());
3、使用loader
$user=Loader::model("user");
$res=$user::get(3);
dump($res->toArray());
4、使用助手函数
$user=model("user");
$res=$user::get(4);
dump($res->toArray());
4、查询操作
1、单条数据
// get方法
// 使用数字
$res=User::get(1); // 默认主键
// 使用数组
$res=User::get(["name"=>'yzmedu3']); // 默认查找用户名
// 使用闭包函数
$res=User::get(function($query){
$query->where("id",15);
});
// find方法
$res=User::where("id",13)->find();
2、查询多条数据
// all
// 所有数据
$res=User::all();
// 字符串
$res=User::all("1,2,3");
// 数组
$res=User::all([5,6,7]);
// 数组
$res=User::all(['pass'=>'123']);
// 闭包
$res=User::all(function($query){
$query->where("pass","123")
->whereOr("pass","456")
->order("id","desc");
});
// select 和 all 基本类似
$res=User::select();
$res=User::limit(2)->select();
3、获取某个字段和某列值
// 获取某个值
$res=User::where("id",5)->value("name");
// 获取某列值
$res=User::column("name","id");
4、动态查询
// 查询出匹配到的第一条数据
// getBy字段名
$res=User::getByAge('44');
dump($res->toArray());
5、增加操作
1、设置属性
$user=new User();
$user->name="yzmedu21";
$user->pass="abc";
$user->age=18;
// 返回影响行数
$user->save();
2、通过data方法
$user=new User();
$user->data([
"name"=>"yzmedu22",
"age"=>"22",
"pass"=>"qwe",
]);
// 返回影响行数
$user->save();
3、实例化时
$user=new User([
"name"=>"yzmedu23",
"pass"=>'zxc',
"age"=>20
]);
// 返回影响行数
$user->save();
// allowField 屏蔽掉数据库中不存在的字段
$user->allowField(true)->save();
// 指定插入数据库的字段
$user->allowField(['name','age'])->save();
4、获取自增的ID
// 获取插入数据ID
echo $user->id;
5、增加多条数据
$user=new User();
$list=[
['name'=>"yzmedu33","age"=>33],
['name'=>"yzmedu34","age"=>34]
];
$user->saveAll($list);
6、create方法
$user=User::create([
"name"=>"yzmedu35",
"age"=>35
]);
6、删除操作
// $user=User::get(1);
// 返回影响行数
// dump($user->delete());
// 删除主键2
$user=User::destroy(2);
// 删除主键3,4,5
$user=User::destroy("3,4,5");
$user=User::destroy([6,7,8]);
// 删除name
$user=User::destroy(['name'=>"yzmedu23"]);
// 删除多个条件
$user=User::destroy(['name'=>'yzmedu33','age'=>33]);
// 使用闭包
$user=User::destroy(function($query){
$query->where("id","<","15");
});
// 删除数据
$user=User::where("id",">","19")->delete();
dump($user);
7、修改操作
// 设置字段更新数据
$user=User::get(15);
$user->age=19;
$res=$user->save();
// 直接数组修改
$user=new User;
$res=$user->save(
[
"pass"=>"qweasd",
"age"=>16,
],["id"=>16]);
// 修改数据
$_POST['name']="yzmedu55";
$_POST['pass']="pass55";
$_POST['age']="55";
$_POST['sex']="nan";
$_POST['id']=17;
$user=new User;
$res=$user->allowField(['name','pass','age'])->save($_POST,['id'=>17]);
// 批量更新
$data=[
['id'=>15,'name'=>"abc",'pass'=>456],
['id'=>17,'name'=>"abc",'pass'=>456],
];
$user=new User;
$res=$user->saveAll($data);
echo User::getLastSql();
// 更新操作
$user=new User;
$res=$user->where("id",'>','17')->update(['age'=>18]);
$res=User::where("id","<","18")->update(['pass'=>'zxc']);
// 闭包更新数据
$user=new User;
$res=$user->save(['name'=>'yunzhimeng'],function($query){
$query->where("id","15");
});
8、聚合
// 统计数据条数
$tot=User::count();
dump($tot);
// 条件判断
$tot=User::where("age",">",18)->count();
dump($tot);
// 统计最大值
$max=User::max('age');
dump($max);
// 统计最小值
$min=User::min("age");
dump($min);
// 平均值
$avg=User::avg('age');
dump($avg);
// 求和
$sum=User::sum('age');
dump($sum);
9、获取器
1、数据模型
// sex 的获取器
public function getSexAttr($val){
switch ($val) {
case '0':
return "未知";
break;
case "1":
return "男";
break;
case "2":
return "女";
break;
}
}
2、控制器
// 获取ID为15 的数据
$user=User::get(17);
// 经过获取器的操作
dump($user->toArray());
dump($user->sex);
// 不经过获取器处理
dump($user->getData());
3、注意
1、如果字段 user_status 修改器名字getUserStatusAttr
2、如果字段 status 修改器名字getStatusAttr
10、修改器
1、数据模型
// 用户密码的修改器
public function setPassAttr($val){
return md5($val);
}
2、控制器
// 修改 ID 为15 的密码
$user=new User();
// 密码会实现自动加密
$res=$user->save(['pass'=>'456'],['id'=>15]);
dump($res);
3、注意
1、修改器的触发条件是 save方法
11、自动完成
1、修改器和自动完成区别
修改器:数据赋值的时候自动进行转换处理
自动完成:没有手动赋值的情况下进行手动处理
2、自动完成
// 增加和修改操作都会执行
protected $auto=[];
// 创建数据执行
protected $insert=['create_time'];
// 修改数据执行
protected $update=['update_time'];
12、时间戳
1、系统支持自动写入创建和更新的时间戳字段
1) 在配置文件中设置
// 自动写入时间戳字段
'auto_timestamp' => true,
2) 在数据模型中设置
// 设置自动写入时间戳
protected $autoWriteTimestamp=true;
2、可以设置字段默认值
// 增加时间的字段
protected $createTime='create_times';
// 更新时间的字段
protected $updateTime='update_times';
3、取消更新时间戳设置
protected $updateTime=false;
14、软删除
1、作用:
实现假删除,可以进行恢复
2、实现
<?php
// 声明命名空间
namespace app\index\model;
// 导入系统的数据模型
use think\Model;
// 配合软删除
use traits\model\SoftDelete;
// 声明user模型
class User extends Model{
// 使用软删除
use SoftDelete;
// 设置删除的时间戳
protected $deleteTime="delete_times";
}
3、控制器
1、删除数据
$res=User::destroy(15);
2、获取数据
$res=User::get(15);
// 软删除 数据库数据存在,但是get获取不到
3、直接删除数据
$res=User::destroy(14,true);
$user=new User();
$res=$user->where("id",'5')->delete();
4、读取所有数据包含软删除数据
$res=User::withTrashed()->find(15);
$res=User::withTrashed()->select();
5、仅仅读取软删除数据
$res=User::onlyTrashed()->select();
$res=User::onlyTrashed()->find(1);
ThinkPHP5.0框架开发--第8章 TP5.0 模型的更多相关文章
- ThinkPHP5.0框架开发--第5章 TP5.0 控制器
ThinkPHP5.0框架开发--第5章 TP5.0 控制器 第5章 TP5.0 控制器 ============================================== 上次复习 1.路 ...
- ThinkPHP5.0框架开发--第4章 TP5.0路由
ThinkPHP5.0框架开发--第4章 TP5.0路由 第4章 TP5.0 路由 ================================================== 上次复习 1. ...
- ThinkPHP5.0框架开发--第3章 TP5.0 配置
ThinkPHP5.0框架开发--第3章 TP5.0 配置 第3章 TP5.0 配置 ========================================================= ...
- ThinkPHP5.0框架开发--第1章 Tp5.0安装
ThinkPHP5.0框架开发--第1章 Tp5.0安装 第1章 Tp5.0 安装 ======================================================== 今 ...
- ThinkPHP5.0框架开发--第2章 TP5.0架构
ThinkPHP5.0框架开发--第2章 TP5.0架构 第2章 TP5.0架构 ================================================== 上次复习 1.如 ...
- ThinkPHP5.0框架开发--第11章 TP5.0 杂项
ThinkPHP5.0框架开发--第11章 TP5.0 杂项 第11章 TP5.0 杂项 =============================================== 今日学习 1. ...
- ThinkPHP5.0框架开发--第10章 TP5.0验证器
ThinkPHP5.0框架开发--第10章 TP5.0验证器 第10章 TP5.0验证器 ======================================= 今日学习 1.验证器 1) 控 ...
- ThinkPHP5.0框架开发--第9章 TP5.0视图和模板
ThinkPHP5.0框架开发--第9章 TP5.0视图和模板 第9章 TP5.0视图和模板 ===================================================== ...
- ThinkPHP5.0框架开发--第7章 TP5.0数据库操作
ThinkPHP5.0框架开发--第7章 TP5.0数据库操作 第7章 TP5.0数据库操作 ===================================================== ...
随机推荐
- Qt-信号和槽-1对1
前言:信号和槽是Qt的核心机制,窗体和控件对象之间的沟通一般都使用信号和槽. 对于部件有哪些信号和槽,可以查看help文档. 一.使用自定义槽 1.1 新建工程 新建工程,新建Widget类(基于QW ...
- Excel里的多列求和(相邻或相隔皆适用)
最近,需要这个知识点,看到网上各种繁多复杂的资料,自己梳理个思路. 不多说,直接上干货! 简述:将L列.M列和N列,相加放到O列.(当然这里是相邻的列).同时,也可以求相隔几列的某些列相加.
- Vue模拟酷狗APP问题总结
一.NewSongs.vue中的38行 this.$http.get('/proxy/?json=true') 里面这个路径的获取 二.router文件夹中的index.js 中的 comp ...
- Redis安装到Windows系统
redis官方没有windows版本,在windows下安装需要单独去找.地址:https://github.com/MSOpenTech/redis/releases.本文用的是Redis-x64- ...
- 「JavaSE 重新出发」05.03.01 利用反射分析类
在 java.lang.reflect 包中有三个类 Field, Method 和 Constructor 分别用于描述类的域.方法和构造器. Class 类中的 getFields, getMet ...
- Activiti Modeler 5.22.0整合到Spring项目
转载 https://blog.csdn.net/u010411264/article/details/71480354
- Java中更精确的计时
我们一般的java运输计时代码是 long begintime = System.currentTimeMillis(); //运算代码 long endtinme=System.currentTim ...
- TESTUSERB 仅能对TESTUSERA 用户下的某些表增删改查、有些表仅能对某些列update,查询TESTUSERB 用户权限,获取批量赋予语句。
TESTUSERB 仅能对TESTUSERA 用户下的某些表增删改查.有些表仅能对某些列update,查询TESTUSERB 用户权限,获取批量赋予语句. select 'grant '|| PRIV ...
- (1)安装vagrant和virtualbox
使用xshell,学校服务器需要先联外网. 1.安装Linux头包(linux-header package): # #yum install kernel-devel 2.安装virtualbox. ...
- windows下Word使用-快捷键
1.word全屏显示——Alt+U+V 2.上标——Ctrl+Shift+= 3.下标——Ctrl+=