我使用雄辩的关系。
当我致电$carcollection = $owner->cars()->get();
时,我有一个可以使用的集合。所以,让我们说,对于这个特定的老板,我有三辆车。该集合是三个数组的集合。每个阵列描述汽车。
这一切都很好。
现在我想在不破坏集合的情况下为数组添加更多属性。附加属性将来自不同的来源,实际上是另一个模型(例如servicehistory
)
要么我检索另一个模型然后尝试merge()
它们,要么我尝试操作集合中的数组而不破坏集合。
所有这些活动都在我的控制器中进行。
是否有一种方法比另一种更好,或者是否有一种我可以使用的完全不同的方法......也许这种逻辑属于模型本身?寻找一些指针:)。
答案 0 :(得分:1)
具体来说,如果你做$owner->cars()->get();
,你就拥有了汽车模型的集合,而不是数组。
有人说过,你可以使用
在你的Car模型上完全加载另一个关系$carcollection = $owner->cars()->with('servicehistory')->get();
$carcollection->first()->servicehistory;
答案 1 :(得分:0)
您可以尝试使用集合的transform方法。
$cars = $owner->cars()->get();
$allServiceHistory = $this->getAllService();
$cars->transform(function($car) use($allServiceHistory) {
// you can do whatever you want here
$car->someAttribute = $allServiceHistory->find(...):
// or
$car->otherAttribute = ServiceHistoryModel::whereCarId($car->getKey())->get();
});
这样,$cars
集合将变为你想要的任何内容。
当然,懒惰加载数据而不是落入n + 1查询情况会更明智。