配置开启后会自动添加自动时间戳写入create_time和update_time两个
端,默认的类型是int,如果是时间类型,可以设置如下
同时也可以自定义两个自动时间戳:
protected $createTime = \'[字段]\'; protected $updateTime = \'[字段]\'; 只读字段在模型类中定义readonly属性:静态
protected $readonly = [\'字段1\',\'字段2\',……]动态设置制度字段:
$user->readonly([\'字段1\',……])->save(); 系统转换系统可以通过模型端设置写入或读取时对字段类型进行转换type
php rotected $type = [ \'price\' => \'integer\', \'status\' => \'boolean\', ;
设置废弃字段 $disuse
数据库写入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