fish / eloquent-cascade
Laravel Eloquent 的级联删除特性
1.3
2016-08-11 15:18 UTC
Requires
- php: >=5.4.0
- illuminate/support: ^4.2|>=5.0
Requires (Dev)
- illuminate/config: ^4.2|>=5.0
- illuminate/database: ^4.2|>=5.0
- orchestra/testbench: ^3.2
- phpunit/phpunit: ^5.1
This package is auto-updated.
Last update: 2024-09-20 04:23:54 UTC
README
本软件包提供了一个简单的特性,利用 Eloquent 的删除事件递归删除给定模型的所有指定关系。
安装
首先通过 Composer 安装此软件包。编辑项目中的 composer.json
文件,添加 require "fish/eloquent-cascade"
。
"require": {
"fish/eloquent-cascade": "^1.0"
}
接下来,在终端更新 Composer
composer update
使用方法
-
在一个父模型中包含该特性,并让其他模型扩展它
namespace App; use Illuminate\Database\Eloquent\Model; use Fish\Cascade\Cascade; class BaseModel extends Model { use Cascade; }
-
将您希望删除的关系添加到模型上的受保护
$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']);
}
}