Laravel:级联删除模型,如果没有其他模型共享它
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel:级联删除模型,如果没有其他模型共享它相关的知识,希望对你有一定的参考价值。
所以我有三个模型:Post,Page和Image。帖子和页面可以共享相同的图像,或者他们可以拥有自己的图像。
当我删除帖子时,我想删除与该帖子相关的所有图像,但仅当这些图像与其他任何内容相关时才会被删除。例如,如果帖子有图像但页面也共享,则帖子不应该在级联上删除该图像。
这是我的模特:
岗位
class Post extends Model
{
public function images(){
return $this->morphToMany('AppImage', 'imageable');
}
}
页
class Page extends Model
{
public function images(){
return $this->morphToMany('AppImage', 'imageable');
}
}
图片
class Image extends Model
{
public function post()
{
return $this->morphedByMany('AppSocialPost', 'imageable');
}
public function pages()
{
return $this->morphedByMany('AppSocialPublication', 'imageable');
}
}
通常,我只会做$ post-> images() - > delete(),但我需要首先检查这些图像中是否有任何一个属于另一个模型。
答案
而不是调用$post->images()->delete()
,你可以像这样在AppServiceProvider
中监听模型删除事件
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Post::deleting(function ($post) {
$post->images->map(function ($image) {
if($image->pages()->count() == 0){
$image->delete(); //now delete
}
});
});
}
}
以上是关于Laravel:级联删除模型,如果没有其他模型共享它的主要内容,如果未能解决你的问题,请参考以下文章
如何使用不会将删除级联到其子级的 ForeignKeys 创建 Django 模型?