【问题标题】:Laravel - Mutator doesn't seem to work on updateLaravel - Mutator 似乎不适用于更新
【发布时间】:2020-05-02 19:13:20
【问题描述】:

我有以下突变器:

public function setFormattedCriteriaAttribute($value)
{
    $this->attributes['formatted_criteria'] = serialize($value);
}

当我调用以下命令时,为什么它不更新 formatted_criteria 值 - 请注意该字段列在我的可填充属性数组中?

$jobAlert = JobAlert::findOrFail($id);

$jobAlert->update([
        'frequency' => $request->frequency,
        'criteria'  => $criteria,
        'formatted_criteria' => ['test']
]);

【问题讨论】:

  • 是什么让你觉得它没有更新?
  • @patricus 我检查了数据库中的结果。其他值已更新,除了具有 mutator 的 formatted_criteria 值
  • 你从dd($jobAlert->isFillable('formatted_criteria'));得到什么?
  • @patricus 我明白了。我知道它在我的可填充数组中,因为它在我创建时保存,而不是在我更新时保存。
  • @patricus 想通了......我将我的模型传递给使用上述代码作为 Jobalert $jobalert 而不是 JobAlert $jobalert 的方法

标签: laravel mutators


【解决方案1】:

确保您的 $fillable 变量中有 formated_criteria。

更新

如果您的模型中有 casts 数组,请修改 else add。

protected $casts = [
        'formatted_criteria'    => 'array',
    ];

然后使用二进制将您的字段更新为LONGTEXT

【讨论】:

  • 它在我的可填充数组中
  • 如果您将此字段保留为数组,请添加强制转换变量并将您的列类型更新为长文本二进制
  • 我不认为强制转换适用于序列化数组,它只适用于 json..我不得不使用访问器来手动反序列化。
  • 如果您使用强制转换作为数组或 json,则不需要序列化或反序列化。我正在使用 mysql 中的 json。是这些情况的最佳解决方案。不要序列化你的数组,只需保存它。删除该字段的修改器和访问器
  • 我必须将它作为数组而不是 json 保存在数据库中,因为当您将 json 解码回数组时,它不会保留值的顺序,我只需要它来显示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-04
  • 2023-04-06
  • 2017-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多