2

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

我试图通过雄辩的模型保存/更新/创建事件来做到这一点,但似乎您不能使用这些事件来更新/更改数据。

目前我有以下内容:

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

这没有达到预期的效果;有没有办法做到这一点 - 我不想在不同的地方手动调用这个函数,因为我觉得它应该是自动的。

提前致谢

4

2 回答 2

2

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

  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));
    });
于 2019-01-04T12:07:45.667 回答
0

你可以在你的模型中定义一个 setter mutator,这样你就可以在那里创建 MD5 哈希并在保存之前将其设置为模型属性。

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

于 2019-01-04T11:55:06.403 回答