繁体   English   中英

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的方法“在检索时自动获取数组”。 你混淆了accessorsmutators 正如方法名称所暗示的,当您设置content属性时会调用 mutator。

要创建在获取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",
];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM