Laravel 雄辩的';s默认的$attributes don';不要变异

Laravel 雄辩的';s默认的$attributes don';不要变异,laravel,eloquent,mutators,Laravel,Eloquent,Mutators,似乎$attributes属性中定义的默认值在保存到数据库之前没有发生变化 我有以下设置: protected $attributes = array( 'data' => array(); ); public function getDataAttribute($value) { return unserialize($value); } public function setDataAttribute($value) { $this->attri

似乎$attributes属性中定义的默认值在保存到数据库之前没有发生变化

我有以下设置:

protected $attributes = array(
    'data' => array();    
);

public function getDataAttribute($value)
{
    return unserialize($value);
}
public function setDataAttribute($value)
{
    $this->attributes['data'] = serialize($value);
}
我得到的只是一个数据库字段,里面填充了“Array”和一个preg_replace错误。在重写的
save()
方法中指定默认属性时,它确实会发生变化

有人能证实这一点和/或提出建议吗


谢谢。

您正在为对象本身指定一个默认变量,该变量不在mutator的函数范围内

最好的选择可能是在模型的构造函数中包含默认值,以便在创建对象时调用和修改它们。我认为这样做应该奏效:

function __construct($attributes = array()) {
    parent::__construct($attributes);
    $this->data = array();
}

演示如何插入/更新数据库。使用
Model::create()
。但同样的情况也适用于
Model::save()
Model::update
是的,我也在考虑这个解决方法。但是,在我看来,
$attributes
没有被变异似乎是一种框架缺陷,不是吗?我应该为此提出一个问题吗?这不是一个缺陷-不。一个变异子应用于一个“setter”。您没有运行“setter”-您已经定义了一个对象默认值。它们不是一回事。只是澄清一下——当你“设置”它时,属性是“变异的”——而不是当你“保存”它时。