json - laravel 自定义 api 资源关系
问题描述
我有一个查询来获取用户,该表与其他 3 个相关,但查询有点长,我想处理 JsonResource 但我无法生成 JsonResource,因为我有它正常查询。
方法索引:
public function index()
{
$users = User::select('users.id', 'users.name', 'users.email', 'users.username', 'users.status', 'users.id_cost_center', 'cost_centers.code AS code_cost_center', 'cost_centers.description AS cost_center',
'users.id_dependence', 'dependencies.description AS dependence', 'users.id_profile', 'profiles.name AS profile', 'users.created_at')
->join('cost_centers', 'users.id_cost_center', '=', 'cost_centers.id')
->join('dependencies', 'users.id_dependence', '=', 'dependencies.id')
->join('profiles', 'users.id_profile', '=', 'profiles.id')
->orderBy('users.created_at', 'desc')
->get();
$message = $this->sendResponse($users, 'List of users');
return $message;
}
我的用户模型中的关系:
public function cost_center()
{
return $this->belongsTo(CostCenter::class, 'id_cost_center');
}
public function dependence()
{
return $this->belongsTo(Dependence::class, 'id_dependence');
}
public function profile() {
return $this->belongsTo(Profile::class, 'id_profile');
}
其他表中的关系:
成本中心:
public function users()
{
return $this->hasMany(User::class, 'id_cost_center');
}
依赖:
public function users()
{
return $this->hasMany(User::class, 'id_dependence');
}
轮廓:
public function users()
{
return $this->hasMany(User::class, 'id_profile');
}
回复:
{
"success": true,
"data": [
{
"id": 1,
"name": "admin",
"email": "admin@gmail.com",
"username": "admin",
"status": 1,
"id_cost_center": 1,
"code_cost_center": "001",
"cost_center": "Admin",
"id_dependence": 1,
"dependence": "System",
"id_profile": 1,
"profile": "Developer",
"created_at": "2021-09-13T11:26:46.000000Z"
},
{
"id": 2,
"name": "user",
"email": "user@gmail.com",
"username": "user",
"status": 1,
"id_cost_center": 2,
"code_cost_center": "002",
"cost_center": "Service",
"id_dependence": 2,
"dependence": "Store",
"id_profile": 2,
"profile": "Aux",
"created_at": "2021-09-13T11:26:46.000000Z"
}
],
"message": "List of users"
}
我试图创建一个用户集合类,但它只生成用户而不是关系:
public function toArray($request)
{
return [
'data' => $this->collection,
];
}
它只向我显示用户数据,我希望能够得到与第一次正常查询相同的答案。
解决方案
你可以做的3件事:
- 调用用户模型时始终返回关系:
class User extends Model {
protected $with = ['cost_center', 'profile', 'dependence'];
// ...
}
这将始终返回具有关系的用户。
- 仅在使用时返回关系
toArray
。
public function toArray($request)
{
return [
'data' => $this->collection->with('cost_center'),
];
}
- 只需在控制器中执行此操作。
$users = User::with('cost_center', 'profile', 'dependance')->get();
推荐阅读
- javascript - 如何调用外部网址?
- angular - 更新 formArray 上的值
- javascript - 使用 Node.js 中的 FileSystem(fs) 模块将多个 DOM 元素保存和加载为 JSON 的最简洁方法是什么?
- maven - 在 Jenkins 管道中使用 maven 版本插件升级版本时出现错误的替换错误
- android - MainApplication 什么时候被杀死,如果之后调用它的静态函数会发生什么?
- fortran - 读取多个文件并在fortran 77中存储数据
- asp.net-mvc - MVC 应用程序中的 Chart.js
- visual-foxpro - Visual Foxpro 9 具有大数值的奇怪行为
- vmware - ESXi 虚拟机快照创建 | PowerCLI
- c# - 保持控制台打开以在 C# dot.net 核心中侦听来自远程服务器的信息