当答案模型试图从答案表数据库中更改“ ans”属性的值时,出现此异常。
public function setAnsAttribute($ans){
}
ErrorException:间接修改重载属性
App \ Answer :: $ attribute无效
答案 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;
}