ErrorException:间接修改重载属性App \ Answer :: $ attribute无效

时间:2019-07-18 18:19:25

标签: php mysql laravel laravel-5

当答案模型试图从答案表数据库中更改“ ans”属性的值时,出现此异常。

public function setAnsAttribute($ans){

}
  

ErrorException:间接修改重载属性
  App \ Answer :: $ attribute无效

2 个答案:

答案 0 :(得分:0)

setAnsAtribute方法没有代码?如果您有代码,请添加更多代码以查看发生了什么。谢谢。

如果您没有代码,请在下面进行说明。

我将您带到Laravel Mutators页,以便您可以查看示例并在示例代码中附加您要执行的操作。

función pública setAnsAttribute ($value) {
    /**
     *  You can transform the value or modify other values in the table here, 
     *  according to your needs.
     */
    $this->attributes['ans'] = $value;
}

答案 1 :(得分:0)

我从未遇到此错误,因此我做了一些研究,并创建了以下内容来说明问题:

课程:

class SomeMagicMethodImplementer
{
    private $properties = [];

    public function __get($k)
    {
        return $this->properties[$k] ?? null;
    }

    public function __set($k, $v)
    {
        $this->properties[$k] = $v;
    }
}  

用法:

$impl = new SomeMagicMethodImplementer();
$impl->bar = 'bar';
print_r($impl->bar); // prints bar
$impl->foo[] = 'foo';

错误原因:

$impl->foo[] = 'foo' // Will throw error: Indirect modification of overloaded property
  

间接修改重载属性

使用上面的示例代码,此错误实质上表明,通过魔术设置器创建的任何属性只能通过私有实例变量$properties进行修改。

在Laravel和模型的上下文中,只能通过受保护的实例变量$attributes修改属性。

Laravel示例:

public function setAnsAttribute($value)
{
    // output will be an array
    $this->attributes['ans'][] = $value;
}