The*_*eek 4 php laravel eloquent
根据https://laravel.com/docs/5.6/eloquent-serialization,可以setAppends在模型实例上使用以动态地向模型添加任何可用的额外属性。但是,除了遍历集合之外,我还没有找到对模型集合执行此操作的方法。
有没有更聪明的方法来做到这一点?像这样:
$facilities = Facility:all();
$facilities->setAppends();
Run Code Online (Sandbox Code Playgroud)
目前唯一的选择是:
foreach ($facilities as $facility) {
$facility->setAppends([
'your_attribute_here'
]);
}
Run Code Online (Sandbox Code Playgroud)
编辑:澄清一下,我想在运行时动态地做到这一点。我定义的额外属性在获取模型的任何地方都不需要,并且可能会导致大量额外开销。
Jon*_*eir 10
您可以使用更高阶的消息:
$facilities->each->setAppends([
'your_attribute_here'
]);
Run Code Online (Sandbox Code Playgroud)
在您的模型中添加以下访问器
public function getCustomAttribute()
{
return 'some-value';
}
Run Code Online (Sandbox Code Playgroud)
在 上定义setAppends宏Collection,最好在服务提供者(例如 AppServiceProvider)中定义,以便您可以在任何地方使用它:
Collection::macro('setAppends', function ($attributes) {
return $this->map(function ($item) use ($attributes) {
return $item->setAppends($attributes);
});
});
Run Code Online (Sandbox Code Playgroud)
然后你可以做
$facilities = Facility:all();
$facilities->setAppends([
'some-value'
]);
Run Code Online (Sandbox Code Playgroud)