是否有任何可能的方法在Laravel模型上延迟加载自定义属性,而不是每次使用appends
属性加载它?我正在寻找类似于lazy load Eloquent relationships的方式。
例如,在模型上给出这种访问器方法:
public function getFooAttribute(){
return 'bar';
}
我希望能够做到这样的事情:
$model = MyModel::all();
$model->loadAttribute('foo');
这个问题不与Add a custom attribute to a Laravel / Eloquent model on load?相同,因为它想要在每个模型加载上加载自定义属性 - 我希望延迟加载属性仅在指定时。
我想我可以使用与自定义属性相同的名称为模型实例分配属性,但这具有调用访问器方法两次的性能缺点,可能会产生意外的副作用访问器会影响类属性,只是感觉很脏。
$model = MyModel::all();
$model->foo = $model->foo;
有没有人有更好的方法来解决这个问题?
答案 0 :(得分:13)
这是序列化吗?您可以在Model实例上使用append()
方法:
$model = MyModel::all();
$model->append('foo');
append
方法也可以将数组作为参数。
答案 1 :(得分:0)
这样的事情应该有用......
public function loadAttribute($name) {
$method = sprintf('get%sAttribute', ucwords($name));
$this->attributes[$name] = $this->$method();
}