ThinkPHP5--基础篇(模型)

ThinkPHP5--基础篇(模型)

一、数据库连接

i. 使用应用配置文件 conf/config.php

  1. app目录同级 新建conf/database.php
image.png
  1. 使配置文件生效 入口文件配置路径(入口文件 安全检测|过滤请求|定义常量)
image.png
  1. config()助手函数 打印数据库信息测试
image.png
  1. 上述访问路径 可在Apache(或其他服务器)配置文件中配置虚拟域名 指定根目录等等简化 详情参见【配置篇】

ii. Db::connect()|Db::connect([‘’=>’’,...])

  1. use think\Db ; Db::connect() ;
image.png
image.png

或者是 $res = Db::connect(); dump($res) ;打印出东西 不代表连接上了数据库

  1. Db::connect([‘’=>’’,...]); 接受参数 数组类型 即database.php里面的配置
image.png
image.png

此处 仅仅是打印出 配置的连接信息而已......

  1. Db::connect(“”); 传入参数 字符串类型 即dsn配置mysql://root:@127.0.0.1:3306/test#utf8
image.png
image.png

或者

image.png

传入的参数必须在conf/config.php中配置 并且以此参数为key的value值 同database.php 配置的’database’=>[‘’=>’’,...] 数据库信息

iii. 数据库查询操作

  1. 原生sql

a) Db::query($sql) //直接传入sql语句

image.png
image.png

b) Db::execute(‘’,[])//写操作(增|删|改) 两个参数:sql语句 ,传入数组类型绑定的参数

image.png
image.png
image.png
  1. Db::table(‘test_user’)->select(); 查询所有 返回值是二维数组
image.png
image.png
  1. Db::table('test_user')->where('id','>','3')->select() ; //where条件 查询部分

![
image.png
image.png
  1. Db::table('test_user')->find(); 查询一条记录 不加where条件 默认返回第一条 查询不到结果返回 NULL
image.png
image.png
  1. Db::table('test_user')->value('userName') ; 查询一条记录 返回某个字段的值 查询的记录不存在 返回NULL
image.png
image.png
  1. Db::table('test_user')->column('userName'); 返回某一列的值 一维数组

a) 传入一个参数

image.png
image.png

b) 传入第二个参数 返回一维数组 key[第二个参数]=>value[第一个参数] 若记录不存在 则返回空数组

  1. Db::name('user');//不用传入表前缀 (已经在配置文件中配置了表前缀)
image.png
image.png
  1. 助手函数db(‘user’)不需要传入表前缀

a) Db::name(‘user’); 单例模式 需要引入 user think\Db

b) 助手函数db()每次调用实例化一次 传递第三个参数 不会重新实例化 db(‘user’,[],false)

iv. 数据库添加

  1. insert([]) 默认返回值是影响记录行数
image.png
image.png
image.png
  1. insertGetId([]) 返回添加成功后 新增记录的id
image.png
image.png
image.png
  1. insertAll([]) 批量添加数据 返回影响行数
image.png
image.png

v. 数据库更新

  1. update([]) 返回影响行数 UD操作 传入id
image.png
image.png

也可以 ->where([‘id’=>XXX])

  1. setField('userName','ceshi45')修改一个字段的值 返回影响行数
image.png
image.png
image.png
  1. setInc(‘num’,3); num字段每次增加3 第二个参数不传 默认一次自增1 返回影响行数

  2. setDec(‘num’,3); 同上自减

vi. 数据删除

  1. delete() 删除条件 返回影响行数
image.png
image.png
  1. 如上 如果按照 id删除 id又是表里面的主键

可以直接$db->delete(2);

  1. 删除所有 $db->where(“1=1”)->delete() ;

vii. 条件构造器

  1. buildSql()返回当前sql语句
image.png
image.png
  1. where(‘’,’’,’’)字段 条件 值(字符串类型 或者数组类型【between|in 需要传入范围】)
image.png
image.png
  1. where([]) 默认是’’=>’’ key=value ‘’=>[‘条件’,’’]
image.png
image.png
image.png
image.png
  1. where('id','EXP','in(1,5)')
image.png
image.png
  1. 多个where AND
image.png
image.png
  1. 多个where OR
image.png
image.png

viii. 链式操作

  1. ->field("typeName,id,title,ctime") //限定查询的列

  2. ->order("id desc") //按照id降序

  3. ->limit(0,5)->select() ; //查询5条数据

image.png
image.png
  1. 用limit分页的时候 limit((当前页-1)*每页显示条数,每页显示条数)

page(当前页,每页显示条数)

  1. group("pid")
image.png
image.png

二、模型

i. 模型(model)文件定义

  1. app\模块\model\文件名.php 文件名与表名对应(去掉表前缀) 遵循驼峰命名法

表名:test_user -->User test_type_info --->TypeInfo

image.png
  1. 引入model测试
image.png
image.png
  1. 实例化 $user = new User ; $res = $user::get(21) ;


    image.png
image.png
  1. 需要用到多个模型的时候 Loader::model('User') ;
image.png
image.png
  1. model(‘’) 助手函数 加载model类 有可能会被覆盖


    image.png
image.png

ii. 模型查询

  1. get()

a) 传主键 get(21)

b) 传查询条件 闭包函数

User::get(function($query) {

$query->where('id','20') ;

}) ;

image.png
image.png
  1. find()条件 取一条记录
image.png
image.png
  1. all() 获取多条数据 不传参数 查询所有 传入参数’1,2,3’主键 或者[1,2,3] 或者是闭包函数
image.png
image.png
  1. 查询单个字段的值 value(‘’)
image.png
image.png
  1. 获取一列的值 column(‘value’,’key’) 用法同上

iii. 使用模型添加数据

  1. create([],true) 第二个参数 过滤掉无效字段 将第二个参数传为数组[‘name’,’auth’] 则新增数据的时候 只会新增name auth
image.png
image.png
  1. 实例化模型 save()


    image.png
image.png
  1. 或者直接save([‘’=>’’,...]) ; 返回影响行数
image.png
image.png
  1. allowField(true)->save([]) ;
image.png
image.png
image.png
  1. 批量添加 saveAll([[],[]]) ;

iv. 使用模型更新数据

  1. update(['id'=>58 ,

'userName'=>'qazxwsedcrf'

]) ;

传主键

image.png
image.png
image.png
  1. update([

'userName'=>'q1111'

],['id'=>58]) ; 第二个参数还可以是闭包函数 用法同上

image.png
image.png
image.png
  1. where('id',58)->update(['userName'=>'qwe111111']) ; 返回影响行数 推荐
image.png
image.png
image.png
  1. save()
image.png
image.png
  1. save([],[])|save([],function($query){}) 推荐
image.png
image.png
image.png
image.png
  1. saveAll([[],[]]) 传二维数组 传主键

v. 使用模型删除数据

  1. destroy(58) 传主键 返回影响行数
image.png
image.png
  1. destroy(['id'=>57]) ; 传条件 返回影响行数
image.png
image.png
  1. destroy(function($query) {

$query->where('id','>','50') ;

}) ; 闭包函数 传条件 返回影响行数

image.png
image.png
  1. $user->delete() ; 或者User::where(‘id’,’>’,’10’)->delete() 删除所有 where(‘1=1’) 条件永远为真
image.png
image.png

vi. 模型聚合操作

  1. count() 查询总记录数 可加条件 where(‘id’,’>’,’15’)->count()
image.png
  1. where()->max(‘字段名’)

  2. 求和 where()->sum(‘字段名’)

  3. 求平均值 where()->avg(‘字段名’)

  4. 最小值 where()->min(‘字段名’)

vii. 模型获取器

  1. 场景 状态:0|1 存储 展示的时候 开启|关闭

  2. model/模型.php 模型文件 public function getAuthAttr() {}

方法名固定: public function get字段名Attr(){}

image.png
image.png
image.png

viii. 模型修改器+自动完成

  1. 如 存储密码的时候 自动md5加密

  2. model文件 public function setPasswordAttr($val) 第二个参数数组类型 将要新增的记录

image.png
image.png
  1. 控制器新增数据
image.png
image.png
image.png
  1. 自动完成

a) 模型文件:

image.png

b) 控制器文件新增

image.png
image.png

ix. 模型时间戳+软删除

  1. 时间戳 (添加时间|更新时间) model类提供了配置 自动管理

  2. 添加时间|更新时间 默认是create_time update_time

a) conf/database.php 全局配置 若是表里没有create_time|update_time 会报错 不推荐

// 自动写入时间戳字段

'auto_timestamp' => true,

b) Model文件中 protected $autoWriteTimestamp = true ; 新增|更新时自动配置时间戳 (默认是create_time|update_time ) 如果不是 需要指定 如下 需要指定成使用的 create_at|update_at

如果只需要用到一个时间 把另外一个设置为false即可

image.png
  1. 软删除:给作废的记录打个 不会真正的从数据库删除 标记软删除时间 默认是delete_time

a) delete_time默认是NULL 软删除之后 值是时间戳

b) 使用软删除 model类中 use traits\model\SoftDelete ;


image.png

c) 控制器中 destroy()|delete() 执行软删除 软删除之后 用withTrashed(true) 查询被软删除的记录


image.png

$res->getData() 获取原始数据

d) 软删除 一般会有垃圾箱|回收站 仅查询全部被软删除的记录 onlyTrashed()

image.png

e) 软删除数据恢复 update将delete_time字段设置为NULL

f) 记录软删除 默认是delete_time 可在model类中修改 方法同上

image.png

g) 真正将数据库中记录删除 destroy(‘’,true) |delete(true)

image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容