ThinkPHP5--基础篇(模型)

ThinkPHP5--基础篇(模型)

一、数据库连接

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

1. app目录同级 新建conf/database.php

 

2. 使配置文件生效  入口文件配置路径(入口文件 安全检测|过滤请求|定义常量)

 

3. config()助手函数 打印数据库信息测试

 

4. 上述访问路径  可在Apache(或其他服务器)配置文件中配置虚拟域名 指定根目录等等简化  详情参见【配置篇】

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

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

 

 

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

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

 

 

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

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

 

 

或者

 

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

 

iii. 数据库查询操作

1. 原生sql

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

 

 

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

 

 

 

 

2. Db::table(‘test_user’)->select(); 查询所有 返回值是二维数组

 

 

3. Db::table('test_user')->where('id','>','3')->select() ; //where条件 查询部分

 

 

4. Db::table('test_user')->find(); 查询一条记录  不加where条件 默认返回第一条 查询不到结果返回 NULL

 

 

5. Db::table('test_user')->value('userName') ; 查询一条记录 返回某个字段的值  查询的记录不存在 返回NULL

 

 

6. Db::table('test_user')->column('userName'); 返回某一列的值 一维数组

a) 传入一个参数

 

 

 

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

7. Db::name('user');//不用传入表前缀  (已经在配置文件中配置了表前缀)

 

 

8. 助手函数db(‘user’)不需要传入表前缀  

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

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

iv. 数据库添加

1. insert([])  默认返回值是影响记录行数

 

 

 

2. insertGetId([]) 返回添加成功后 新增记录的id

 

 

 

 

3. insertAll([]) 批量添加数据   返回影响行数

 

 

v. 数据库更新

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

 

 

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

2. setField('userName','ceshi45')修改一个字段的值 返回影响行数

 

 


 

3. setInc(‘num’,3); num字段每次增加3  第二个参数不传  默认一次自增1  返回影响行数

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

 

vi. 数据删除

1. delete()   删除条件 返回影响行数

 

 

2. 如上 如果按照 id删除 id又是表里面的主键    

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

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

 

vii. 条件构造器

1. buildSql()返回当前sql语句

 

 

2. where(‘’,’’,’’)字段 条件 值(字符串类型  或者数组类型【between|in 需要传入范围】)

 

 

3. where([]) 默认是’’=>’’  key=value    ‘’=>[‘条件’,’’]

 

 

 

 

4. where('id','EXP','in(1,5)')

 

 

5. 多个where   AND

 

 

6. 多个where OR

 

 

 

viii. 链式操作

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

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

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

 

 

 

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

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

5. group("`pid`")

 

 

二、模型

i. 模型(model)文件定义

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

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

 

2. 引入model测试

 

 

3. 实例化 $user = new User ; $res = $user::get(21) ;

 

 

4. 需要用到多个模型的时候  Loader::model('User') ;

 

 

5. model(‘’) 助手函数  加载model类   有可能会被覆盖

 

 

ii. 模型查询

1. get()

a) 传主键 get(21)

b) 传查询条件   闭包函数

User::get(function($query) {

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

}) ;

 

 

 

2. find()条件   取一条记录

 

 

3. all() 获取多条数据 不传参数 查询所有 传入参数’1,2,3’主键 或者[1,2,3]  或者是闭包函数

 

 

4. 查询单个字段的值 value(‘’)

 

 

5. 获取一列的值 column(‘value’,’key’) 用法同上

 

iii. 使用模型添加数据

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

 

 

2. 实例化模型  save()

 

 

3. 或者直接save([‘’=>’’,...]) ; 返回影响行数

 

 

4. allowField(true)->save([]) ;

 

 

 

5. 批量添加   saveAll([[],[]]) ;

 

iv. 使用模型更新数据

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

'userName'=>'qazxwsedcrf'

]) ;

传主键

 

 

 

 

2. update([

'userName'=>'q1111'

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

 

 

 

3. where('id',58)->update(['userName'=>'qwe111111']) ; 返回影响行数  推荐

 

 

 

4. save()

 

 

5. save([],[])|save([],function($query){}) 推荐

 

 

 

 

6. saveAll([[],[]])  传二维数组 传主键

 

 

v. 使用模型删除数据

1. destroy(58) 传主键 返回影响行数

 

 

2. destroy(['id'=>57]) ; 传条件   返回影响行数

 

 

3. destroy(function($query) {

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

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

 

 

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

 

 

 

 

vi. 模型聚合操作

1. count() 查询总记录数 可加条件   where(‘id’,’>’,’15’)->count()

 

2. where()->max(‘字段名’)

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

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

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

vii. 模型获取器

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

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

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

 



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

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

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

 


 

 

 

3. 控制器新增数据

 


 

 

4. 自动完成

a) 模型文件:

 

 

b) 控制器文件新增

 

 

 

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即可

 

 

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

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

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

 

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

 

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

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

 

e) 软删除数据恢复 updatedelete_time字段设置为NULL

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

 

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

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页