【问题标题】:Transform collection to replace only some values转换集合以仅替换某些值
【发布时间】:2017-10-29 08:57:32
【问题描述】:

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

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

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

在导出过程中,我想将 user_id 和 responsibility 值替换为实际用户的姓名,而不是他们的用户 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
    ];
});

但是,这只会返回集合中的 responsibility 和 user_id - 而不是仅更新这些值。

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

如何最有效地将模型集合中的两个值替换为用户名?

【问题讨论】:

    标签: php laravel collections laravel-5.5


    【解决方案1】:

    只需修改要转换的值并返回 $form 模型:

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

    【讨论】:

    • 你这么说好像很简单!
    猜你喜欢
    • 2019-09-27
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 2014-10-14
    • 2021-07-10
    • 2017-07-09
    相关资源
    最近更新 更多