Laravel Обновление Eloquent Field автоматически при сохранении - PullRequest
0 голосов
/ 04 января 2019

Мне нужно обновить поле в таблице базы данных до хэша MD5 других значений поля (sting concat)

Я пытаюсь сделать это с помощью сохранения / обновления / создания красноречивой моделисобытия, но кажется, что вы не можете использовать события для обновления / изменения данных.

В настоящее время у меня есть следующее:

static::saving(function ($model) {
        CustomLog::debug(__CLASS__, __FUNCTION__, __LINE__, 'saving fired');
        $model->sku = static::generateSku($model);
    });

Это не имеет желаемого эффекта;Есть ли способ сделать это - я не хочу добавлять ручной вызов этой функции в разных местах, так как я чувствую, что она должна быть автоматической.

Заранее спасибо

Ответы [ 2 ]

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

Так что я думаю, что у меня есть ответ здесь. это в два раза:

  1. в обратном вызове события вам необходимо обновить соответствующее поле, используя $ model-> setAttribute ($ field, $ value); функция.
  2. в моей функции generateSku я полагался на отношения моделей для получения имен и т. Д. Из дочерних отношений; однако даже отношения моделей в это время не обновлялись, поэтому функция использовала старые отношения. Изменение этого значения для использования данных из обновляемой модели / таблицы, а не их связей дало желаемый эффект.

В целом код события теперь выглядит так:

static::saving(function ($model) {
        CustomLog::debug(__CLASS__, __FUNCTION__, __LINE__, 'saving model fired');
        $model->setAttribute('sku', static::generateSku($model));
    });
0 голосов
/ 04 января 2019

Вы можете определить сеттер-мутатор в своей модели, чтобы вы могли создать там хэш MD5 и установить его в свойство модели, прежде чем он будет сохранен.

документы: https://laravel.com/docs/5.7/eloquent-mutators

...