[英]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和mutators 。 正如方法名称所暗示的,当您设置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.