fish/eloquent-cascade

Laravel Eloquent 的级联删除特性

1.3 2016-08-11 15:18 UTC

This package is auto-updated.

Last update: 2024-09-20 04:23:54 UTC


README

Latest Stable Version Total Downloads Latest Unstable Version License Build Status

本软件包提供了一个简单的特性,利用 Eloquent 的删除事件递归删除给定模型的所有指定关系。

安装

首先通过 Composer 安装此软件包。编辑项目中的 composer.json 文件,添加 require "fish/eloquent-cascade"

"require": {
  "fish/eloquent-cascade": "^1.0"
}

接下来,在终端更新 Composer

composer update

使用方法

  1. 在一个父模型中包含该特性,并让其他模型扩展它

     namespace App;
    
     use Illuminate\Database\Eloquent\Model;
     use Fish\Cascade\Cascade;
    
     class BaseModel extends Model
     {
         use Cascade;
     }
    
  2. 将您希望删除的关系添加到模型上的受保护 $cascade 数组中。例如:

     class User extends BaseModel
     {
    
         protected $cascade = ['author'];
    
         public function author() {
    
           return $this->hasOne(Author::class);
    
         }
     }
    
     class Author extends BaseModel
     {
    
         protected $cascade = ['posts'];
    
         public function user() {
    
           return $this->belongsTo(User::class);
    
         }
    
         public function posts() {
    
           return $this->hasMany(Post::class);
    
         }
    
     }
    
     class Post extends BaseModel
     {
    
       protected $cascade = ['comments'];
    
       public function comments() {
    
         return $this->hasMany(Comment::class);
    
       }
    
     }
    

如果您正在使用用于多态关系的特性,并希望将此关系添加到 $cascade 数组中,请覆盖受保护的 getCascade 方法。假设您有一个 Locale 特性

   trait Locale {

    public function locale() {
        return $this->morphMany(Locale::class, 'translatable');
    }

    protected function getCascade() {
      return array_merge($this->cascade, ['locale']);
    }

   }