我有返回用户测验状态的资源,如下所示
$users = Users::with('UserQuiz')->get();
return response(['users'=> UserResource::collection($users ) ]);
在资源里面我需要返回用户信息和他们的测验
$passedQuizzes = [] ;
foreach($this->UserQuiz as $userQuiz )
{
if($userQuiz->score > 50 )
$passedQuizzes[] = $userQuiz ;
}
$totalQuiz = Quiz::count();
return [
'id' => $this->id ,
'name' => $this->name ,
'email' => $this->email ,
'quiz'=>[
'total'=> $totalQuiz ,
'passed' => count($passedQuizzes)
]
];
我需要显示测验的总数和多少这个用户已经通过...所以我需要一个额外的查询内我的资源这是不是一个好主意考虑到我运行相同的查询一遍又一遍
因此,我需要以某种方式将totalQuiz
从控制器注入到资源中,因此,我在文档中提到了其他内容,因此我猜它应该类似于
$users = Users::with('UserQuiz')->get();
$totalQuiz = Quiz::count();
return response(['users'=> UserResource::collection($users )->additional(['totalQuiz' => $totalQuiz ]) ]);
但是我不知道如何访问资源中的这些附加数据,我希望能够执行以下操作
return [
'id' => $this->id ,
'name' => $this->name ,
'email' => $this->email ,
'quiz'=>[
'total'=> $this->additional->totalQuiz ,
'passed' => count($passedQuizzes)
]
];
这是一个非常常见的问题,我想知道为什么网上没有很多关于这个问题的答案
这是我唯一能在网上找到的似乎没有合适答案的东西
Additional data in Laravel Resource
1条答案
按热度按时间vohkndzv1#
下面的代码向你的资源添加了一个静态方法。这个方法可以根据你的需要添加任意多的参数。我添加
$totalQuiz
参数是为了演示的目的。然后,您可以使用这个新的静态方法(而不是静态
UserResource::collection($users)
方法)创建资源。