转换集合以仅替换某些值

时间:2017-10-29 08:57:33

标签: php laravel collections laravel-5.5

我正在我建立的应用中实现导出功能。

导出过程会获取一组模型值,然后将其导出到下载到客户端的电子表格中。

在我的模型上,我有一个user_id和一个responsibility。这两个字段都包含一个映射回我的users表的ID(通常是两个不同的用户)。

在导出过程中,我想将user_idresponsibility值替换为实际用户'名称,而不是他们的用户ID。

map()transform()似乎是实现我所追求目标的正确方法,但是我无法看到实现我想要的优雅方式。

这是我到目前为止所做的:

$forms = Form::where('created_at', '>=', (new Carbon('first day of last month'))->toDateString())
                        ->where('created_at', '<=', (new Carbon('last day of last month'))->toDateString())
                        ->get();

$forms->transform(function($form) {
    return [
        'responsibility' => is_null($form->responsibility) ? $form->responsibility : $form->personResponsible->name,
        'user_id' => $form->user->name
    ];
});

但是,这只会在集合中返回responsibilityuser_id - 而不是仅仅更新这些值。

现在,我可以在返回数组中包含其余的列,但这似乎是不必要的 - 当然有更好的方法可以做到这一点。

如何使用用户&#39;替换模型集合中的两个值?最有效的名字?

1 个答案:

答案 0 :(得分:1)

只需修改要转换的valules并返回$ form Model:

    $forms->transform(function($form) {
        $form->responsibility = is_null($form->responsibility) ? $form->responsibility : $form->personResponsible->name;
        $form->user_id = $form->user->name;
        return $form;
    });