php - Laravel 更改集合中的每个模型
问题描述
我有一个项目集合。现在,在通过我的 api 发送它之前,我想更改模型的值(但我不想更新数据库中的模型)。
现在我想循环我的集合并将其作为 json 返回,但我得到invalid Payload
.
这是我执行的代码:
$trainees = Trainee::select();
if(!$request->user()->hasPermission('read-trainees')) {
$trainees->where('status', 1)->where('visible', 1);
} else {
$trainees->with(array('user'=>function($query){
$query->select('id','firstname', 'lastname');
}));
$trainees->select('user_id');
}
$trainees->select('interested_jobs', 'graduation');
$trainees = $trainees->get();
return $trainees
->map(function ($item) {
$item->id = encrypt($item->id);
return $item;
})
->toJson();
解决方案
您可以通过多种方式实现这一目标。
每个Eloquent 集合都扩展了Collection类,让您可以使用有用的方法,例如map()
or each()
:
// get your collection
$trainees = Trainee::all();
// customize them
$trainees->each(function ($trainee) {
$trainee->id = encrypt($item->id);
});
return $trainees;
PS:默认情况下,当向 API 返回数组/集合时,Laravel 会将其返回为 JSON。
第二种方法,我认为更细化和推荐,是使用API Resources。从文档中:
在构建 API 时,您可能需要一个位于 Eloquent 模型和实际返回给应用程序用户的 JSON 响应之间的转换层。Laravel 的资源类允许你将你的模型和模型集合转换成 JSON。
因此,您需要:
1. 生成你的 API 资源
php artisan make:resource TraineeResource
2.自定义它
应用\Http\Resources\TraineeResource.php
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class TraineeResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'id' => encrypt($this->id),
// ...
];
}
}
3.应用它
在您的控制器中:
应用程序/Http/Controllers/MyCoolController.php
use App\Http\Resources\TraineeResource;
public function aCoolMethod(Request $request)
{
// get your collection
$trainees = Trainee::all();
// return it
return TraineeResource::collection($trainees);
}
推荐阅读
- three.js - 三JS编辑器中使用场景的用户数据
- javascript - 在不提供网页的情况下使用 npm 测试 javascript 代码
- javafx - HelloFX.java:1:错误:包 javafx.application.Application 不存在
- mysql - 如何从mysql中的重复数据中只选择一个数据?
- python - 无法在 Visual Studio 代码中安装 twilio
- javascript - 设置 Socket.io 房间变量
- python - 在 python 中下载批量图像
- integration - 带有动态域名的 Docusign 重定向 url
- html - 将 django Authentication 表单与 html 表单一起使用
- python - 如何从查询集中删除而不删除Django中的原始模型本身