观察者Observer模型事件,使用注意情况
观察者Observer模型事件使用
了解一下观察者有那些事件?怎么使用
想在一个模型中监听多个事件,可以把它写成一个类,类中的方法名称即是你想要监听的事件名称
class ArticleObserver
{
/**
* 监听数据即将创建的事件。
*
* @param Article $article
* @return void
*/
public function creating(Article $article)
{
}
/**
* 监听数据创建后的事件。
*
* @param Article $article
* @return void
*/
public function created(Article $article)
{
}
/**
* 监听数据即将更新的事件。
*
* @param Article $article
* @return void
*/
public function updating(Article $article)
{
}
/**
* 监听数据更新后的事件。
*
* @param Article $article
* @return void
*/
public function updated(Article $article)
{
}
/**
* 监听数据即将保存的事件。
*
* @param Article $article
* @return void
*/
public function saving(Article $article)
{
}
/**
* 监听数据保存后的事件。
*
* @param Article $article
* @return void
*/
public function saved(Article $article)
{
}
/**
* 监听数据即将删除的事件。
*
* @param Article $article
* @return void
*/
public function deleting(Article $article)
{
}
/**
* 监听数据删除后的事件。
*
* @param Article $article
* @return void
*/
public function deleted(Article $article)
{
}
/**
* 监听数据即将从软删除状态恢复的事件。
*
* @param Article $article
* @return void
*/
public function restoring(Article $article)
{
}
/**
* 监听数据从软删除状态恢复后的事件。
*
* @param Article $article
* @return void
*/
public function restored(Article $article)
{
}
}
实际业务使用场景
删除文章业务
不生效做法
/**
* 删除方案
* @param $ids
* @return mixed
*/
public function delete($ids)
{
return Scheme::query()->whereIn('id', $ids)->get()->delete();
}
生效做法
- 第一种
/** * 删除文章 * @param $ids * @return mixed */ public function delete($ids) { return Article::query()->whereIn('id', $ids)->get()->each->delete(); }
- 第二种
/** * 删除文章 * @param $ids * @return mixed */ public function delete($ids) { $articles = Article::query()->whereIn('id', $ids)->get(); foreach ($articles as $article){ $article->delete(); } }
创建观察者文件
namespace App\Observers;
use App\MicroServices\Scheme\Models\Article;
use App\MicroServices\Article\Services\TagService;
class ArticleObserver
{
/** * 监听文章删除后需要处理业务,减少标签引用
* @param Article $scheme
*/ public function deleted(Article $article)
{ //减标签引用数量
$tagService = app(TagService::class); $tagService->decreaseCount($article->tag_id,1);
}}
注册观察者
需要在App\Providers\AppServiceProvider.php文件注册观察者
/**
* Bootstrap any application services. * * @return void */ public function boot()
{ Article::observe(ArticleObserver::class);
}
有帮助到你记得点赞,收藏👍👍👍
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: