Laravel在保存时自动更新雄辩字段

时间:2019-01-04 11:36:52

标签: laravel eloquent laravel-events

我需要将数据库表中的字段更新为其他字段值的MD5哈希值(sting concat)

我正在尝试通过雄辩的模型保存/更新/创建事件来执行此操作,但是看来您无法使用事件来更新/更改数据。

当前我有以下内容:

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

这没有达到预期的效果;有没有办法做到这一点-我不想在各个地方为此功能添加手动调用,因为我认为它应该是自动的。

预先感谢

2 个答案:

答案 0 :(得分:0)

您可以在模型中定义一个setter mutator,以便可以在其中保存MD5哈希并将其设置为模型属性。

docs:https://laravel.com/docs/5.7/eloquent-mutators

答案 1 :(得分:0)

所以我想我在这里有答案。它有两个方面:

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