【问题标题】:Automatically Change Model Value If Another Value Updates如果另一个值更新,则自动更改模型值
【发布时间】:2019-05-28 13:26:25
【问题描述】:

使用 Laravel 和 Eloquent,如果名为 status 的列将其值更改为“完成”,例如,是否可以自动将另一列 (issue_id) 的值更改为 NULL?

我想知道 set 属性或拦截 save() 方法,但不确定哪个最好。

【问题讨论】:

    标签: php laravel eloquent


    【解决方案1】:

    您可以使用Observers

    例如,要观察Issue 模型,您可以像这样生成一个观察者:

    php artisan make:observer IssueObserver --model=Issue
    

    这将产生一个观察者,您可以在其中收听许多模型事件。

    <?php
    
    namespace App\Observers;
    
    use App\Issue;
    
    class IssueObserver
    {
    
        /**
        * Handle the Issue "updating" event.
        *
        * @param  \App\Issue  $Issue
        * @return void
        */
        public function updating(Issue $issue)
        {
            if($issue->status == 'complete') {
                $issue->issue_id = null;
            }
        }
    }
    

    要注册 Observer,您需要将其添加到 AppServiceProvider@boot()

    <?php
    
    namespace App\Providers;
    
    use App\Issue;
    use App\Observers\IssueObserver;
    use Illuminate\Support\ServiceProvider;
    
    class AppServiceProvider extends ServiceProvider
    {
        /**
        * Bootstrap any application services.
        *
        * @return void
        */
        public function boot()
        {
            Issue::observe(IssueObserver::class);
        }
    
        /**
        * Register the service provider.
        *
        * @return void
        */
        public function register()
        {
            //
        }
    }
    

    您也可以在 App/Issue 模型中执行此操作。

    public static function boot()
    {
        parent::boot(); 
    
        static::updating(function ($issue) {
            if($issue->status == 'complete') {
                $issue->issue_id = null;
            }
        })
    }
    

    显然,您需要聆听适合您需求的事件。这只是一个例子。您可以查看所有可用的模型事件here

    【讨论】:

    • updated 中调用save 这不是无限调用updated 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    • 2019-03-18
    • 2020-05-17
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多