ThinkPHP6.0学习笔记-模型操作 (5)

配置开启后会自动添加自动时间戳写入create_time和update_time两个
端,默认的类型是int,如果是时间类型,可以设置如下

protected $autoWriteTimestamp = [自动时间戳字段]

同时也可以自定义两个自动时间戳:

protected $createTime = \'[字段]\'; protected $updateTime = \'[字段]\'; 只读字段

在模型类中定义readonly属性:静态

protected $readonly = [\'字段1\',\'字段2\',……]

动态设置制度字段:

$user->readonly([\'字段1\',……])->save(); 系统转换

系统可以通过模型端设置写入或读取时对字段类型进行转换type

php rotected $type = [ \'price\' => \'integer\', \'status\' => \'boolean\', ;
设置废弃字段 $disuse

JSON字段 * 数据库JSON

数据库写入JSON字段,直接通过数组方式即可完成:

data = [ \'username\' => \'李白\', \'password\' => \'123\', \'gender\' => \'男\', \'email\' => \'LIBai@163.com\', \'price\' => 100, \'details\' => \'123\', \'list\' => [\'username\'=>李白,\'gender\'=>\'女\'] ]; Db::table(\'tp_user\') ->json([\'list\']) // 定义list字段为json类型字段 ->insert($data)

查询数据,需要转换JSON数据格式:

Db::table(\'tp_user\')->json([\'list\'])->find(288);

将JSON字段里的数据作为查询条件

$user = Db::table(\'tp_user\')->json([\'list\'])->where(\'list-username\',\'李白\')->find();

修改JSON字段数据

$data[\'list\'] = [\'username\'=>\'李白\',\'gender\'=>\'男\']; Db::table(\'tp_user\')->json([\'list\'])->where(\'id\',220)->update($data); 模型JSON

设置写入JSON字段的字符字段:

protetced $json = [\'list\'];

使用模型方法新增JSON数据的字段

$user = new User; $user->name = \'thinkphp\'; $user->info = [ \'email\' => \'thinkphp@qq.com\', \'nickname \'=> \'流年\', ]; $user->save();

具体的请参考官方文档JSON部分

模型软删除

在实际项目中,对数据频繁使用删除操作会导致性能问题,软删除的作用就是把数据加上删除标,而不是真正的删除,同时也便于需要的时候进行数据的恢复。

要使用软删除功能,需要引入SoftDeletetrait,例如User模型按照下面的定义就可以使用软删除功能:

use SoftDelete ; rotected $deleteTime = \'delete_time\';

delete_time默认为Null,类型为时间戳类型,用于记录数据的删除时间。

确定开启软删除和字段后

// 软删除 User::destroy(1); // 真实删除 User::destroy(1,true); $user = User::find(1); // 软删除 $user->delete(); // 真实删除 $user->force()->delete();

软删除后系统会忽略该条数据,模型会自动屏蔽数据

使用withTrashed()取消屏蔽软删除的数据

使用onlyTrashend()可以查询被软删除的数据

使用restore()可以恢复被软删除的数据

如果需要强制删除,需要使用force()强制安排

模型和数据库的事件 数据库事件

执行增删改查操作的时候,可以同时出发一些事件来执行额外的操作;额外的操作事件可以部署在构造方法中等待激活后执行;数据库事件方法是Db::event(\'事件名\',\'执行函数\')

事件名 描述
before_select   select查询前回调  
before_find   find查询前回调  
after_insert   insert操作后回调  
after_update   update操作后回调  
after_delete   delete操作后回调  

一般情况下,数据库事件卸载控制器端的初始化方法里,有利于统一管理

public function initialize() { Db::event(\'before_select\', function($query){ echo "执行了批量的查询操作" }); } 模型事件

事件 描述 事件方法名
after_read 查询后 onAfterRead
before_insert 新增前 onBeforeInsert
after_insert 新增后 onAfterInsert
before_update 更新前 onBeforeUpdate
after_update 更新后 onAfterUpdate
before_write 写入前 onBeforeWrite
after_write 写入后 onAfterWrite
before_delete 删除前 onBeforeDelete
after_delete 删除后 onAfterDelete
before_restore 恢复前 onBeforeRestore
after_restore 恢复后 onAfterRestore

在模型类中使用静态方法调用即可完`成事件触发

关联模型

关联模型:将数据表与表之间进行关联和对象化;

关联方式 关联方式 描述
hasOne   一对一关联  
belongsTo   一对一关联-反向  
hasMany   一对多关联  
hasOneThrough   远程一对一  
hasManyThrough   远程一对多  
belongsToMany   多对多关联  
morphMany   多态一对多  
morphOne   多态一对一  
morphTo   多态关联  

实例:

主表:tp_user 主键:id

附属表:tp_profile 字段:user_id hobby 外键user_id

主表的主键与附属表的外键进行关联

一对一关联 hasOne

关联定义:

hasOne(\'关联模型类名\',\'外键\',\'主键\')

关联模型:

外键:默认的外键规则是当前的模型名+_id

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzdsyy.html