php - 数据表内的列表 [Laravel] [查询生成器]
问题描述
我想在我的应用程序中添加一个数据表,如下所示:
这是一个数据表,显示给定 manager_id 的所有培训师。
我的问题是我不知道如何在 Gymnasts 列中创建一个无序列表,该列表应该显示已分配给教练的所有体操运动员
我的 MySQL 表用户有以下字段:
- 身份证(PK)
- 姓名
- 电子邮件
- email_verified_at
- 类型
- manager_id
- trainer_id
- 名
- 姓
我现在在我的控制器中有这个,所以我可以得到一个完整的教练员列表和他们指定的体操运动员,但我想将所有体操运动员连接到一个列表中以便能够显示它
$user = Auth::user();
if ($user['type'] == "Manager"){
$gymnasts = DB::table('users as trainer')
->leftJoin('users as gymnast', 'gymnast.trainer_id', '=', 'trainer.id')
->select('trainer.id', 'trainer.name', 'trainer.firstName', 'trainer.lastName','gymnast.firstName as gymnastName' ,'gymnast.lastName as gymnastSurname','trainer.email_verified_at')
->where('gymnast.manager_id', $user['id'])
->where('gymnast.type', 'Trainer')
->get();
return view('layouts.users.indexTrainers',['type' => $user['type'],'gymnasts' => $gymnasts]);
}else{
return back()
->withErrors(['error' => 'You are not allowed to access this layout.']);
}
视图代码将与此类似:
<tbody>
@foreach($trainer as $key => $data)
<tr>
<td>{{$data->firstName}} {{$data->lastName}}</td>
<td>
@if($u->gymnasts)
@foreach($u->gymnast as $g)
<ul>
<li>{{$g->name}} {{$g->surname}}</li>
</ul>
@endforeach
@else
<i>No gymnast assigned yet.</i>
@endempty
</td>
<td>
@isset($data->email_verified_at)
<span class="badge badge-success">Activated</span></td>
@else
<span class="badge badge-danger">Inactive</span>
@endempty
<td>
@isset($data->email_verified_at)
<button class="btn btn-primary btn-sm"><i class="fas fa-search"></i> View</button>
@else
<button class="btn btn-info btn-sm"><i class="fas fa-redo-alt"></i> Resend email</button>
@endempty
<button class="btn btn-secondary btn-sm"><i class="fas fa-edit"></i> Edit</button>
<button class="btn btn-danger btn-sm"><i class="fas fa-trash-alt"></i> Delete</button>
</td>
</tr>
@endforeach
</tbody>
我希望得到一个领域
<ul><li>Name1 Surname1</li><li>Name2 Surname2</li></ul>
所以我可以把它注射到细胞里。
在此先感谢您的帮助。
附加说明:
一位经理可以管理 N 个用户(体操运动员或教练员)
一名教练可以训练N名体操运动员
一名培训师只能由一名经理管理
一名体操运动员只能由一名教练训练
- 一名体操运动员只能由一名经理管理
解决方案
如果您只有一个具有不同角色的表“用户”,那么您需要创建一个自我关系,这将帮助您为每个用户找到培训师试试这个:
function trainers(){
return $this->hasMany(User::class, 'id','trainer_id');
}
function manager(){
return $this->hasOne(User::class, 'id','manager_id');
}
在刀片中做这样的事情
@foreach($users as $u)
<tr>
<td>
{{$u->name}} <br/>
@if($u->trainers)
@foreach($u->trainers as $t)
<ul>
<li>{{$t->name}}</li>
</ul>
@endforeach
@endif
</td>
</tr>
@endforeach
控制器代码可能是:
User::query()->with('trainers')
->whereNotIn('user.type', ,['Trainer','Manager'])
->where('user.manager_id', manager_id)
->get()
推荐阅读
- docker - 我可以从 docker 映像中禁用“-t”选项吗
- python - 添加使用 Sphinx 在运行时生成的属性的文档
- kotlin - 在 Kotlin 中,是否可以在编译时检查构造函数的特定值是否作为指定值输入?
- batch-file - 用 ren 命令错误替换
- swift - CGDisplayCreateImage 只取壁纸截图
- flutter - Flutter:如何映射地图列表?
- javascript - 是否可以将 image1.gift 和 image2.jpg 与 .net 或 javascript 合并?
- r - 在 geom_polygon 中创建阴影颜色
- javascript - HTMLButtonElement.onclick 处未捕获的 ReferenceError
- triggers - 用户 mariadb 的特定主机