1、Model的命名规范

一般model的名字和表名是对应的,例如

表名 pre_user -> 模型名 User.php User
表名 pre_user_info -> 模型名 UserInfo.php User

一般一个表对应一个model类,model类里面是对这个表的增删改查的各种操作

2、Model使用

四种调用模型的方法

$res = User::get(1)$user = new User;
$res = $user::get(1);$user = Loader::model("User");
$res = $user::get(1);$user = model("User);
$res = $user::get(1);$res->toArray() # 抽象对象数组化

具体使用示例

<?phpnamespace app\index\model;use think\Model;class User extends Model
{}
<?php
namespace app\index\controller;use think\controller;
use think\Loader;
use app\index\model\User;class Index
{public function index(){# User类对象 推荐$res = User::get(1);# User实例对象
//        $user = new User;
//        $res = $user::get(5);# loader use think\Loader;
//        $res = Loader::model("User");
//        $res = User::get(2);# 助手函数model
//        $user = model("User");
//        $res = $user::get(4);$res = $res->toArray();  //将结果转换成数组dump($res);}
}

3、模型查询数据

# get 获取一条记录
$res = Student::get(1);$res = Student::get(function ($query) {$query->where('id', 1)->field('name', 'age');
});$res = $res->toArray();# all 获取多条记录
$res = Student::all('1, 2, 3');$res = Student::all([1, 2, 3]);$res = Student::all(function ($query) {$query->where('id', '>', 1)->field('name', 'age');});foreach ($res as $val){$val = $val->toArray();  //将结果转换成数组dump($val);
}# find 查询某一条
$res = Student::where('id', '=', '1')->field('name')->find(); $res = $res->toArray();# select 多条查询
$res = Student::where('id', '>=', '1')->field('name')->limit(2)->order('id DESC')->select();foreach ($res as $val){$val = $val->toArray();  //将结果转换成数组dump($val);
}# value 按字段查询一条
$res = Student::where('id', '>=', '1')->value('name');# column 返回字典 name->age
$res = Student::where('id', '>=', '1')->column("age","name");

4、模型添加数据

# create方式 返回对象
$res = Student::create(['name'=>'王大锤','age' => 23,'email'=>'123456@qq.com'], ['name', 'age']
);
$res->id;# 实例化方式
$student = new Student;
$student->name =  '王大锤';
$student->age =  23;
$student->save();# 实例化方式过滤插入字段,返回插入行数
$student = new Student;
$data = ['name' => '王大锤','age' => 23,'email' => '123456@qq.com'
];
$res = $student->allowField(['name', 'age'])->save($data);
dump($res);# saveAll添加多条数据 返回对象列表
$student = new Student;
$data = [['name' => '王大锤','age' => 23,'email' => '123456@qq.com'],['name' => '王二锤','age' => 23,'email' => '123456@qq.com']
];
$res = $student->allowField(['name', 'age'])->saveAll($data);
dump($res);

5、模型更新数据

# update 返回影响行数 推荐
$res = Student::where(['id'=>5])->update(['name'=>'Jack']);# update 第二个参数是条件,返回更新的对象
$res = Student::update(['name'=>'Jack']
, ['id'=>6]);# update 第二个参数可以是闭包函数 返回更新对象
$res = Student::update(['name'=>'Jack']
, function ($query){$query->where('id', '=', 7);
});# save 保存模型对象 返回影响行数
$student = Student::get(1);
$student->name = 'MImi';
$res =  $student->save();# save->where方式,第二个参数为条件,返回影响行数
$student = new Student;
$res = $student->save(['name' => 'Yami'
], ['id' => 1]);# save-闭包函数方式,第二个参数为条件,返回影响行数
$student = new Student;
$res = $student->save(['name' => 'Yami'
], function ($query){$query->where('id', '>', 1);
});# 批量更新 数据中要含有主键,返回更新对象列表
$student = new Student;
$res = $student->saveAll([['id'=>1, 'name' => 'MIMI'],['id'=>2, 'name' => 'MIMI']
]);

6、模型删除数据

# 传入主键,返回影响行数
$res = Student::destroy(1);# 传入条件,返回影响行数
$res = Student::destroy(['id'=>2]);# 传入闭包函数条件,返回影响行数
$res = Student::destroy(function ($query){$query->where('id', '<', '5');
});# 获取对象删除 返回影响行数
$student = Student::get(6);
$res = $student->delete();# 条件删除 返回影响行数 '1=1'清空数据
$res = Student::where(['id'=>5])->delete();

7、模型聚合数据

# 初始化数据库, 准备测试数据
$data = [];
for ($i = 0; $i < 10; $i++) {$data[] = ['name' => "student$i",'age' => 10 + $i];
}
$student = new Student();
$student->saveAll($data);# count sum avg max min
$res = Student::count();$res = Student::where('id', '>', 3)->count();

8、模型修改器和自动完成

将数据库存储的数值型数据转换为字符串

auto (新增及更新的时候自动完成的属性数组)
insert(仅新增的时候自动完成的属性数组)
update(仅更新的时候自动完成的属性数组)

读取器的命名规范是 -> get + 属性名的驼峰命名 + Attr
修改器的命名规范是 -> set + 属性名的驼峰命名 + Attr

定义

<?phpnamespace app\index\model;use think\Model;class Student extends Model
{# 新增及更新 自动完成protected $auto = ['time'];# 新增 自动完成protected $insert = ['insert_time'];# 更新 自动完成protected $update = ['update_time'];# 获取器public function getSexAttr($val){switch ($val) {case 1:return '男';case 2:return '女';default:return '未知';}}# 修改器public function setPasswordAttr($val){return md5($val);}public function setTimeAttr(){return time();}public function setInsertTimeAttr(){return time();}public function setUpdateTimeAttr(){return time();}}

使用

# 新增
$res = Student::create(['name'      => 'tom','age'       => 23,'sex'       => 2,'password'  => '123457'
]);# 修改
$student = Student::where(['id' => 1])->find();
$student->sex = 2;
$res = $student->save();# 转为数组
dump($student->toArray());

9、模型时间和软删除

(1)模型时间

配置文件中设置

"auto_timestamp" => true # 一般不开启这个功能

Model中设置

# 默认字段update_time create_timeprotected $autoWriteTimestamp = True;  // 开启自动时间戳
protected $createTime = 'create_time'; // 可自定义时间字段名
protected $updateTime = 'update_time'; // 关闭 false

使用

# 创建记录 自动完成 create_time 字段
$res = Student::create(['name'      => 'tom','age'       => 23,'sex'       => 2,'password'  => '123457']
);# 更新记录 自动完成 update_time 字段
$student = Student::where(['id' => 1])->find();
$student->sex = 2;
$res = $student->save();

(2)软删除

开启软删除

<?phpnamespace app\index\model;use think\Model;
use traits\model\SoftDelete;class Student extends Model
{use SoftDelete;protected $deleteTime = 'delete_time';}

使用

# 软删除
$res = Student::destroy(1);
$res = Student::get(1); // NULL# 查询已删除的数据
$res = Student::withTrashed(true)->find(1);# 查询仅包含已删除的数据
$res = Student::onlyTrashed()->select();
foreach ($res as $val) {dump($val);
}# 恢复被软删除的数据 update delete_time=NULL# 彻底删除数据
$res = Student::destroy(1,true);# 通过get方式进行软删除/删除
$student = Student::get(3);
$student->delete();//软删除
$res = $student->delete(true);//删除

总结

Db类

  • 增删改查
  • 条件构造器
  • 闭包函数实现where条件
  • 链式操作

Model类

  • 定义
  • 增删改查
  • 聚合操作
  • 自动完成
  • 时间戳
  • 软删除

PHP:ThinkPHP5数据库操作增删改查-Model类相关推荐

  1. springboot如何对本地数据库增删改查_SpringBoot 数据库操作 增删改查

    1.pom添加依赖 org.springframework.boot spring-boot-starter-data-jpa mysql mysql-connector-java org.apach ...

  2. jdbc mysql增删改查_使用JDBC连接MySQL数据库操作增删改查

    更多精彩内容欢迎访问我的个人博客皮皮家园:http://www.zhsh666.xyz或者http

  3. 通过Loadruner对mysql数据库进行增删改查

    通过Loadruner对mysql数据库进行增删改查 操作mysql数据库,是在实现mysql数据源配置的基础上操作,可先阅读:loadrunner参数化使用mysql数据源失败解决方法 写之前先理一 ...

  4. 欢迎来到Jsp编程课时十二——今天实现的目标是。@1将数据库的数据发送到浏览器。@2利用浏览器实现对数据库的增删改查操作。@3理解MVC三层架构的定义。

    完成项目会有以下的效果. JSP第二十课:Mvc+Mysql+Servlect+Jsp实现在浏览器上对数据库的增删改查. MVC全名是Model View Controller, 是 @@1模型(mo ...

  5. php修改数据库字段内容,php对数据库的增删改查操作

    在我看来数据库是个既复杂又高深莫测的东西,但百分之八十左右的程序员都不需要去精通他,对于我们前端开发来说,只要会数据库的增删改查语句就差不多了.首先我们来说说sql的增删改查语句. 一.增删改查 插入 ...

  6. shell编程系列22--shell操作数据库实战之shell脚本与MySQL数据库交互(增删改查)

    shell编程系列22--shell操作数据库实战之shell脚本与MySQL数据库交互(增删改查)Shell脚本与MySQL数据库交互(增删改查)# 环境准备:安装mariadb 数据库 [root ...

  7. 数据库的操作 增删改查 mysql

    数据库的操作 增删改查 mysql 登陆数据库 查看全部的数据库 系统提供的库,除了 test 是给我们练手的 其它的不要碰 mysql库,保存了系统重要内容,比如帐户 root帐户的用户名,密码,就 ...

  8. python操作mysql数据库(增、删、改、查)_python对 MySQL 数据库进行增删改查的脚本...

    # -*- coding: utf-8 -*- import pymysql import xlrd # import codecs #连接数据库 conn = pymysql.connect(hos ...

  9. 动态网站作业4-JSP中实现数据库的增删改查的操作

    动态网站作业4-JSP中实现数据库的增删改查的操作 用Statement向数据库中添加元素 1.创建JavaBean–UserBean package com.media.bean;public cl ...

最新文章

  1. MySQL 行子查询
  2. java 小坑_关于Java子父类关系的小坑
  3. POJ C程序设计进阶 编程题#3:运算符判定
  4. java中断线程_Java中断线程的方法
  5. Object-c学习之路三(@class与#import的区别)
  6. 00030_ArrayList集合
  7. antd 怎么用ajax,react+dva+antd接口调用方式
  8. VSCode自定义代码片段5——HTML元素结构
  9. Oracle中ascii为0的陷阱
  10. 华为和谷歌在全球开发者眼里二选一,谁会获得胜利?
  11. [luogu3198] 玩具装箱
  12. [Docker入门-2] Docker Containers 的创建和使用
  13. Gini Index vs Information Entropy
  14. 波束管理(Beam Management)
  15. 尚硅谷 VUE 尚品汇项目实战问题解决方式整理(Vue3 版)
  16. Docker手把手教程(一)概述 安装
  17. .bat文件注册.ocx+win8开机获得管理员权限+运行程序自动注册.ocx
  18. 手把手教你学习Solidity|Solidity开发【一】
  19. 【广东工业大学】谭子真丨个人作品展示
  20. 从公有云到私有云,云原生正在主导数字化转型企业架构

热门文章

  1. ChatGPT的N种用法(持续更新中。。。)
  2. 赛博格简史:过去、现在和未来
  3. 栈模拟火车进出站Java
  4. spring中IoC和AOP的实现
  5. 用Python进行图像模糊处理和特征提取
  6. 上海大学大一计算机补测查询网址,上海大学检测复习
  7. 2019招聘计算机,2019银行招聘计算机试题(六)
  8. 【Banner—闭组会议总结】
  9. matlab一阶差分并作图,某种股票价格的数据的时间序列模型的建立及分析
  10. 计算机设备管理器老是闪烁,电脑经常闪屏的原因和解决方法