0

我正在尝试定义一个模型突变器

<?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并反序列化该字段的值,以便在检索时自动获取一个数组,但它不起作用。

4

1 回答 1

2

您正在尝试使用名为setContentAttribute. 你混淆了accessorsmutators。正如方法名称所暗示的,设置属性时会调用mutatorcontent

创建获取content属性时调用的访问器:

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

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

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

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

protected $casts = [
    "content" => "array",
];
于 2020-11-23T06:05:46.213 回答