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",
];
我正在尝试定义模型修改器
<?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",
];