本文主要是介绍记 Hyperf booted模型事件的使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前因
产品经理提了一个需求,要求能自定义内容的创建时间,当前事件大于创建时间时,才能查询到这些内容,并对内容进行操作
我的第一反应:不算麻烦,只需要在仓储层的查询方法中,给每个查询都多加一个查询条件不就好了吗
于是勤勤恳恳的写完了,检查代码时,却犹豫了,有没有更好的办法呢?
Laravel的实现方法
翻了翻laravel的相关文档,果然发现了有用的东西
Hyperf的实现
(之所以先去翻Laravel的文档,是因为hyperf的模型相关文档比较简单...)
就介么一点点内容,如果直接把laravel的demo代码搬到hyperf里面,会发现是行不通的,在Hyperf中可以这么写:
/*** 用于加上查询全局作用域,查询创建时间<=当前时间的数据.*/public function booted(): void{static::addGlobalScope('created_at', function ($builder) {$builder->where('created_at', '<=', date('Y-m-d H:i:s'));});}
写完以后,我发现还是会报错:
我写的assignees()关联关系居然返回了null?
原来是因为我创建完数据后,会马上查询该内容,并为该内容添加上一段关联关系,不过因为加上了全局查询的原因,现在查询不到该内容,所以就报错了
解决办法:查询时加上 withoutGlobalScope 取消全局作用域,就可以查到啦!
User::withoutGlobalScope('created_at')->find($id);
记录一次小小的经历~今天的天气是阴天,我喜欢
这篇关于记 Hyperf booted模型事件的使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!