Laravel ORM 中的模型事件,没有开启事务,我们在开发的过程中如何保证数据的一致性?
场景如下
我在新建一篇“文章”之后,我需要初始化这篇文章的“统计”。
新建文章
public function createOrUpdate(Request $request)
{
$input = $request->all();
$mArticle = new Article();
$article = $mArticle->findOrNew($input['id']);
$article->user_id = auth()->user()['id'];
$article->fill($input)->save();
}
使用created事件,在文章创建之后initStatistic()
protected static function boot()
{
static::created(function ($article){
$article->initStatistic();
});
parent::boot();
}
问题如下
当initStatistic()出现问题时,文章已经存在于数据库之中,而文章的统计和文章是强关联关系,必须要存在。这种情况下,如何保证数据库一致性呢?
解决方案,代码如下