Почему laravel не запускает связанное с моделью событие?

У меня есть компания и адрес модели. Отношения 1-1. Для простоты я опущу код с репозиториями.

В модели компании у меня есть такой мутатор:

public function setAddressAttribute($value)
{
    $this->address()->update($value);
}

И когда я обновляю компанию, я заполняю ее атрибутом «адрес», который представляет собой массив атрибутов адреса. Само обновление работает нормально.

В адресной модели у меня есть это:

public static function boot()
    {
        parent::boot();

        static::saved(function($address)
        {
            dd('saved');
        });
    }

Я пробовал разные события, такие как создание/обновление, но они работают только в том случае, если я создаю новую компанию с таким адресом:

$company->address()->save(new Address($attributes['address']));

В этом случае я могу перехватить событие, но когда я пытаюсь обновить адрес, несмотря на то, что он действительно обновляется, событие не срабатывает.

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

Спасибо

update На самом деле я заметил, что никакие события не запускаются, когда я использую метод обновления. Если вместо этого я использую save(), то все в порядке.


person Victor    schedule 25.03.2015    source источник


Ответы (1)


Если вы хотите сделать что-то как в методе creating, так и в методе updating красноречивой модели, вы можете использовать метод saving. Попробуй это:

public static function boot()
{
    parent::boot();

    static::saving(function($address)
    {
        // inside here you can put your logic
        dd('Saving Address');
    });
}

Дополнительная литература: События модели

person gpopoteur    schedule 25.03.2015
comment
Я тоже пробовал это событие, ничего не происходит, хотя модель обновляется - person Victor; 25.03.2015