Laravel:级联删除模型,如果没有其他模型共享它



所以我有三个模型:帖子页面图像。帖子和页面可以共享相同的图像,也可以拥有自己的图像。

当我删除帖子时,我想删除与该帖子相关的所有图像,但前提是这些图像与其他任何内容相关。例如,如果帖子有图像,但它也由页面共享,则帖子不应在级联中删除该图像。

这是我的模型:

发布

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 
}
});
});
}
} 

相关内容

最新更新