我有一些物品。现在,在通过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();
答案 0 :(得分:1)
您可以使用map
函数来更改collection中每个项目的数据。
return $trainees
->map(function ($item) {
$item->id = decrypt($item->id);
return $item;
})
->toJson();
答案 1 :(得分:1)
您可以通过多种方式实现这一目标。
每个Eloquent collection都扩展了Collection类,使您可以使用诸如Map()
之类的有用方法:
// 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时,您可能需要一个位于 在您的口才模型和实际的JSON响应之间 返回给您应用程序的用户。 Laravel的资源类允许 您可以轻松而富有表现力地转换模型和模型 收集到JSON中。
因此,您需要:
php artisan make:resource TraineeResource
App \ 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),
// ...
];
}
}
在您的控制器中:
App / 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);
}