转换集合以仅替换某些值
Transform collection to replace only some values
我正在我构建的应用程序中实现导出功能。
导出过程获取一组模型值,然后将其导出到下载到客户端的电子表格中。
在我的模型上,我有一个 user_id
和一个 responsibility
。这两个字段都包含一个映射回我的用户的 ID table(通常是两个不同的用户)。
在导出过程中,我想将 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
];
});
但是,集合中只有 returns responsibility
和 user_id
- 而不是仅仅更新这些值。
现在,我可以只将其余列包含在 return 数组中,但这似乎没有必要 - 当然有更好的方法来做到这一点。
如何最有效地将模型集合中的两个值替换为用户名?
只需修改要转换的值和 return $form 模型:
$forms->transform(function($form) {
$form->responsibility = is_null($form->responsibility) ? $form->responsibility : $form->personResponsible->name;
$form->user_id = $form->user->name;
return $form;
});
我正在我构建的应用程序中实现导出功能。
导出过程获取一组模型值,然后将其导出到下载到客户端的电子表格中。
在我的模型上,我有一个 user_id
和一个 responsibility
。这两个字段都包含一个映射回我的用户的 ID table(通常是两个不同的用户)。
在导出过程中,我想将 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
];
});
但是,集合中只有 returns responsibility
和 user_id
- 而不是仅仅更新这些值。
现在,我可以只将其余列包含在 return 数组中,但这似乎没有必要 - 当然有更好的方法来做到这一点。
如何最有效地将模型集合中的两个值替换为用户名?
只需修改要转换的值和 return $form 模型:
$forms->transform(function($form) {
$form->responsibility = is_null($form->responsibility) ? $form->responsibility : $form->personResponsible->name;
$form->user_id = $form->user->name;
return $form;
});