Автоматически изменять значение модели, если обновляется другое значение - PullRequest
0 голосов
/ 01 января 2019

С Laravel & Eloquent, если столбец с именем status меняет свое значение, например, на «завершено», возможно ли автоматически изменить значение другого столбца (issue_id) на NULL?

Мне было интересно узнать об атрибуте set или перехватить метод save (), но я не уверен, какой из них лучше.

1 Ответ

0 голосов
/ 01 января 2019

Вы можете использовать Наблюдатели .

Например, чтобы наблюдать модель Issue, вы можете сгенерировать Observer следующим образом:

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

Чтобы зарегистрировать Обозреватель, вам необходимо добавить это к 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;
        }
    })
}

Очевидно, вам нужно будет слушать события, которые соответствуют вашим потребностям.Это всего лишь пример.Вы можете посмотреть все доступные модели событий здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...