Как мне показать конкретные проекты каждого пользователя для администратора.? - PullRequest
0 голосов
/ 05 апреля 2019

Администратор приложения имеет доступ к списку всех проектов пользователя. Напишите сейчас, я могу перечислить проекты, но все они перечислены вместе, независимо от уникального идентификатора URL.

   //    Admin form case controller
    public function adminforms (Project $project){
        $users = User::get();
     return view('smiledesign.adminforms', compact('users', 'project'));
 } 
///Records controller
    public function records(user $users, project $project){
        $project = project::get();

        $users = user::get();

        return view ('/smiledesign/records' , compact( 'users','project'));
    }
<table class="table">
            <thead>
                    <tr>
                            <th>Dr Name</th>
                            <th>User Id</th>
                            <th>Email</th>
                    </tr>
            </thead>
            <tbody>
       @foreach ($users as $user)
             <tr>
                 <td> <a href="/smiledesign/{{$user->id}}/records">{{$user->name}}</a></td>
                 <td> <a href="/smiledesign/{{$user->id}}/records">{{$user->id}}</a></td>
                 <td> <a href="/smiledesign/{{$user->id}}/records">{{$user->email}}</a></td>
             </tr>

         </tbody>
         @endforeach
     </table>
// Records view
<table class="table table-striped table-bordered" id="table_id">
            <thead>
                    <tr>
                            <th>Case Number</th>
                            <th>Case Form</th>
                            <th>Patient Name</th>
                            <th>Date Created</th>
                            <th>Status</th>
                    </tr>
            </thead>
            @foreach ($project as $project)
            <tbody>

             <tr>

                 <td> <a href="/smiledesign/{{$project->id}}/show">{{$project->case_number}}</a></td>

                 @if ($project->services0)
                 <td> <a href="/smiledesign/{{$project->id}}/show">{{$project->services0}}</a></td> 
                 @elseif ($project->services1)
                 <td> <a href="/smiledesign/{{$project->id}}/show">{{$project->services1}}</a></td> 
                 @elseif ($project->services2)
                 {{-- <td> <a href="/smiledesign/{{$project->id}}/show">{{$project->services2 . '  '  . $project->mockup0}}</a></td>  --}}
                 <td> <a href="/smiledesign/{{$project->id}}/show">{{$project->services2 . '  '  . $project->mockup0 . ' ' . $project->mockup1}}</a></td> 

                 @endif
                 <td> <a href="/smiledesign/{{$project->id}}/show">{{$project->first_name . ' ' . $project->last_name}}</a></td>
                 <td> <a href="/smiledesign/{{$project->id}}/show">{{$project->created_at}}</a></td>
                 <td> <a href="/smiledesign/{{$project->id}}/show">{{$project->concerns}}</a></td> 
             </tr>

         </tbody>
         @endforeach

     </table>

То, что я хочу видеть, - это каждый проект конкретного пользователя, когда я нажимаю ссылку от пользователя adminforms. Вместо каждой ссылки я вижу все проекты всех пользователей

1 Ответ

1 голос
/ 06 апреля 2019

Отношения между проектами и пользователями должны быть определены в базе данных и в самих моделях.

База данных:

В моей интерпретации, пользователь может работать над несколькими проектами, а проект может иметь несколько пользователей, это будет отношение многих ко многим. С этим выводом я хотел бы перейти к настройке абстрактной таблицы следующим образом:

  • Таблица пользователей имеет поле идентификатора.
  • таблица проектов имеет поле id.
  • таблица project_users имеет поле id (всегда обязательное для laravel), поле user_id (внешний ключ для users.id) и поле project_id (внешний ключ к projects.id). Не забудьте добавить уникальный ключ, который сочетает в себе user_id и идентификатор проекта, нет необходимости дублировать определения.

Модельные отношения:

Проект

function users()
{
    $this->belongsToMany(User::class, 'project_users', 'project_id', 'user_id');
}

Пользователь

function projects()
{
    $this->belongsToMany(Project::class, 'project_users', 'user_id', 'project_id');
}

Если вы прочитаете эту часть документации , все это будет иметь смысл.

Запрос

$users = User::with('projects')->get();

или

$projects = Project:with('users')->get();

Теперь у каждого пользовательского экземпляра есть коллекция проектов. Если это не так, вам нужно добавить в базу данных запись, связывающую проект с этим пользователем.

Отображение результатов

foreach($users as $user)
{
    foreach($user->projects as $project)
    { 
        echo "$user->name works on project $project->name" . PHP_EOL;
    } 
}

или

foreach($projects as $project)
{
    foreach($project->users as $user)
    { 
        echo "$user->name works on project $project->name" . PHP_EOL;
    } 
}

Sidenote

Мои инструкции оптимизированы для производительности. Вы также можете просто позвонить ->projects на $user, не используя with('projects') в запросе, но это будет означать, что вы запустите запрос на месте. Поскольку этот тип кода склонен к использованию в операторах foreach, вы можете выполнять запросы в операторах foreach, что относится к проблеме N + 1 запроса .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...