如何修改/丰富Eloquent集合?

时间:2016-09-01 00:43:41

标签: arrays laravel-5.2

我使用雄辩的关系。

当我致电$carcollection = $owner->cars()->get();时,我有一个可以使用的集合。所以,让我们说,对于这个特定的老板,我有三辆车。该集合是三个数组的集合。每个阵列描述汽车。

这一切都很好。

现在我想在不破坏集合的情况下为数组添加更多属性。附加属性将来自不同的来源,实际上是另一个模型(例如servicehistory

要么我检索另一个模型然后尝试merge()它们,要么我尝试操作集合中的数组而不破坏集合。

所有这些活动都在我的控制器中进行。

是否有一种方法比另一种更好,或者是否有一种我可以使用的完全不同的方法......也许这种逻辑属于模型本身?寻找一些指针:)。

2 个答案:

答案 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查询情况会更明智。