首页 > 解决方案 > 数据表内的列表 [Laravel] [查询生成器]

问题描述

我想在我的应用程序中添加一个数据表,如下所示:

数据表示例

这是一个数据表,显示给定 manager_id 的所有培训师。

我的问题是我不知道如何在 Gymnasts 列中创建一个无序列表,该列表应该显示已分配给教练的所有体操运动员

我的 MySQL 表用户有以下字段:

我现在在我的控制器中有这个,所以我可以得到一个完整的教练员列表和他们指定的体操运动员,但我想将所有体操运动员连接到一个列表中以便能够显示它

$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> 

所以我可以把它注射到细胞里。

在此先感谢您的帮助。

附加说明:

标签: phpmysqllaravel

解决方案


如果您只有一个具有不同角色的表“用户”,那么您需要创建一个自我关系,这将帮助您为每个用户找到培训师试试这个:

  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()

推荐阅读