如何为Laravel Eloquent模型集合批量调用setAppends()方法?
批量给Eloquent集合添加动态Append属性的简便方法
嘿,我完全懂你不想写foreach循环的心情!其实Laravel的集合本身就有现成的方法帮你批量处理所有模型实例,不用手动遍历~
方法一:用集合的each方法直接处理
这是最直接的方式,利用集合内置的each方法遍历每个模型并设置append属性,代码比手动foreach简洁很多:
$facilities = Facility::all()->each(function ($facility) { // 把你需要添加的额外属性名传进去 $facility->setAppends(['custom_attribute', 'another_attribute']); });
方法二:封装成集合宏,让调用更直观
如果你需要经常做这个操作,可以给集合注册一个自定义宏,这样以后就能像你最开始想的那样,直接在集合上调用setAppends方法:
首先在你的AppServiceProvider的boot方法里注册这个宏:
use Illuminate\Support\Collection; public function boot() { Collection::macro('setAppends', function ($attributes) { return $this->each(function ($model) use ($attributes) { $model->setAppends($attributes); }); }); }
之后就可以非常简洁地调用了:
$facilities = Facility::all()->setAppends(['custom_attribute']);
这样做的好处是代码可读性更高,而且复用性强,整个项目里任何Eloquent集合都能直接用这个方法~
内容的提问来源于stack exchange,提问作者TheCapeGreek
相关产品推荐
相关产品推荐

