laravel 模型修改器未访问定义的字段

laravel model mutators not accessing the defined field

我正在尝试定义模型修改器

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Custom_fields extends Model
{
    protected $table = 'custom_fields';

    public function setContentAttribute($value){
        return unserialize($value);
    }
}

并在测试控制器上尝试

Custom_fields::all()[0]->content;

不幸的是,它不起作用;该值仍然不是数组(序列化)

我想访问字段 content 并反序列化该字段的值,这样我就可以在检索时自动获取一个数组,但它不起作用。

您正在尝试使用名为 setContentAttribute 的方法“在检索时自动获取数组”。你在混淆 accessors and mutators。正如方法名称所暗示的那样,当您 设置 content 属性时,将调用增变器。

创建一个在您 获取 content 属性时调用的访问器:

public function getContentAttribute($value)
{
    return unserialize($value);
}

如果此数据以序列化形式存储,您可能希望您的增变器看起来像这样:

public function setContentAttribute($value)
{
    $this->attributes["content"] = serialize($value);
}

但实际上,您根本不应该使用这些序列化函数。 Laravel 可以 natively convert 将对象 JSON 存储在数据库中。只需在模型的 $casts 属性 中定义 属性 ,在获取或设置 属性.

时,数据将自动转换
protected $casts = [
    "content" => "array",
];