jrmadsen67/laravel-cascade-updates

Laravel的级联模型更新。

1.0 2018-12-28 04:12 UTC

This package is auto-updated.

Last update: 2024-08-28 23:17:37 UTC


README

v1.0.0

这基本上是对Michael Dyrynda的https://github.com/michaeldyrynda/laravel-cascade-soft-deletes的分支。我有一段时间就有这个想法,计划了一下如何实现后,搜索了类似的东西。Michael的库已经建立得很好,并且与我的想法非常相似,所以为了在假期快速完成并保持已知格式,我只是在他的工作上进行了修改。

这个特性允许你在顶级记录更改时更新层次结构中的所有底层实体。例如,如果我有一个有多个帖子(Posts)的作者(Authors),每个帖子有多个评论(Comments),我可以将作者(Author)的is_active标志设置为false,这样他们的所有帖子和相关评论都将同时停用。

代码示例

<?php

namespace App;

use App\Comment;
use jrmadsen67\Database\Support\CascadeUpdates;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    use CascadeUpdates;

    protected $cascadeUpdates = ['comments' => ['is_active']];
    
    public function comments()
    {
        return $this->hasMany(Comment::class);
    }
}

现在你可以更新一个App\Post记录,并且任何相关的App\Comment记录也会被更新。如果App\Comment记录实现了CascadeUpdates特性,那么它的子记录也会被更新,依此类推。

重要提示:这只会更新所有实体上的相同字段。换句话说,不能告诉它在is_active更改时更新myField
$post = App\Post::find($postId)
$post->update(['is_active' => 0]); // Updates the post, which will also trigger the update() method on any comments and their children.

安装

此特性通过Composer安装。要安装,只需将其添加到您的composer.json文件中。

$ composer require jrmadsen67/laravel-cascade-updates

支持

如果您对这个包有一般性的问题,请随时在Twitter上联系我。

如果您认为您已经发现了一个问题,请使用GitHub问题跟踪器报告它,或者更好的是,分支存储库并提交一个拉取请求。

如果您在使用这个包,我很乐意听听您的想法。谢谢!