показать данные из сводной таблицы в Laravel 5.7 - PullRequest
0 голосов
/ 22 октября 2018

Как я могу отобразить данные из сводной таблицы?

Я хочу отобразить user, кому принадлежит project, наряду с user, который вошел в систему, и над project, над которым ведется работа., а также их соответствующие роли.

Использую ли я ->groupBy()?

Просмотр: index.blade.php

<table class="table table-consended">
  <tr>
     <th> <h4>No</h4> </th>
     <th> <h4>Name</h4> </th>
     <th> <h4>Role</h4> </th>
     <th> <h4>Project</h4> </th>
  </tr>
     @foreach($users as $item => $user)
  <tr>
      <td>{{$item+1}}</td>
      <td>{{$user->name}}</td>
      <td>{{$user->role->name}}</td>
      <td>{{$user->projects->project_name}}</td>
  </tr>
     @endforeach()
</table>

my controller.php

public function index()
{
    $users = User::all();
    $projects = User::pluck('name')->where('project_id', 3);
    $projects = Project::all();   
    return view ('teams.index', compact ('user_projects', 'users', 'projects'));
}

Модели User.php

<?php

class User extends Model
{
    protected $fillable = [
        'name', 'email', 'password', 'role_id',
    ];

    public function role()
    {
        return $this->belongsTo(Role::class, 'role_id');
    }

    public function projects()
    {
        return $this->belongsToMany(Project::Class, 'user_projects');
    }
}

Models Project.php

<?php

class Project extends Model
{
    use SoftDeletes;
    protected $table = 'projects';
    protected $fillable = [
        'project_id',
        'project_name',
        'start_date',
        'end_date',
        'project_category',
    ];

    public function users() {
        return $this->belongsToMany(User::class, 'user_projects');
    }
}

и у меня есть сводная таблица user_projects есть user_id и project_id

form

mockup

1 Ответ

0 голосов
/ 22 октября 2018

Вы вводите в заблуждение основные понятия.Вы определили отношение многие ко многим между users и projects через сводную таблицу, что нормально (модели в порядке).Но ваш контроллер и view код неверны.Подход к ...

  • ... показать всех пользователей, имеющих общий проект с зарегистрированным пользователем ...
  • ... вместе с именем проекта , в котором они работают вместе (через сводную таблицу ) ...
  • ... и при условии, что вы правильно реализовали базовая авторизация в Laravel может быть:

контроллер

public function index()
{
    $user = Auth::user();    // logged in user
    $coworkers = [];         // coworkers array
    $projects = [];          // projects array

    foreach ($user->projects as $project) {
        foreach($project->users as $coworker) {
            $coworkers[] = $coworker;
            $projects[] = $project;
        }
    }
    return view ('teams.index', ['coworkers' => $coworkers, 'projects' => $projects]);
}

index.blade.php

<table class="table table-consended">
  <tr>
     <th> <h4>No</h4> </th>
     <th> <h4>Name</h4> </th>
     <th> <h4>Role</h4> </th>
     <th> <h4>Project</h4> </th>
  </tr>

  @foreach($coworkers as $coworker)
      <tr>
          <td>{{$loop->iteration}}</td>
          <td>{{$coworker->name}}</td>
          <td>{{$coworker->role->name}}</td>
          <td>{{$projects[$loop->index]->name}}</td>
       </tr>
  @endforeach

</table>
...