Laravel 保存时自动更新 Eloquent 字段
Laravel Update Eloquent Field automatically on save
我需要将数据库中的一个字段 table 更新为其他字段值的 MD5 散列值(sting concat)
我正在尝试通过 eloquent 模型 saving/updating/creating 事件来执行此操作,但您似乎无法将这些事件用于 update/alter 数据。
目前我有以下内容:
static::saving(function ($model) {
CustomLog::debug(__CLASS__, __FUNCTION__, __LINE__, 'saving fired');
$model->sku = static::generateSku($model);
});
这没有达到预期的效果;有没有办法做到这一点 - 我不想在不同的地方手动调用这个函数,因为我觉得它应该是自动的。
提前致谢
您可以在您的模型中定义一个 setter 突变器,这样您就可以在其中创建 MD5 哈希并将其设置为模型 属性,然后再保存。
所以我想我在这里找到了答案。它有两层:
- 在事件回调中,您需要使用 $model->setAttribute($field, $value); 更新相关字段功能。
- 在我的 generateSku 函数中,我依靠模型关系从子关系中获取名称等;然而,此时模型关系还没有更新,因此该功能正在使用旧关系。将此更改为使用正在更新的 model/table 中的数据而不是其关系具有预期的效果。
总而言之,事件代码现在如下所示:
static::saving(function ($model) {
CustomLog::debug(__CLASS__, __FUNCTION__, __LINE__, 'saving model fired');
$model->setAttribute('sku', static::generateSku($model));
});
我需要将数据库中的一个字段 table 更新为其他字段值的 MD5 散列值(sting concat)
我正在尝试通过 eloquent 模型 saving/updating/creating 事件来执行此操作,但您似乎无法将这些事件用于 update/alter 数据。
目前我有以下内容:
static::saving(function ($model) {
CustomLog::debug(__CLASS__, __FUNCTION__, __LINE__, 'saving fired');
$model->sku = static::generateSku($model);
});
这没有达到预期的效果;有没有办法做到这一点 - 我不想在不同的地方手动调用这个函数,因为我觉得它应该是自动的。
提前致谢
您可以在您的模型中定义一个 setter 突变器,这样您就可以在其中创建 MD5 哈希并将其设置为模型 属性,然后再保存。
所以我想我在这里找到了答案。它有两层:
- 在事件回调中,您需要使用 $model->setAttribute($field, $value); 更新相关字段功能。
- 在我的 generateSku 函数中,我依靠模型关系从子关系中获取名称等;然而,此时模型关系还没有更新,因此该功能正在使用旧关系。将此更改为使用正在更新的 model/table 中的数据而不是其关系具有预期的效果。
总而言之,事件代码现在如下所示:
static::saving(function ($model) {
CustomLog::debug(__CLASS__, __FUNCTION__, __LINE__, 'saving model fired');
$model->setAttribute('sku', static::generateSku($model));
});