Отображение данных из двух таблиц в Laravel - PullRequest
0 голосов
/ 07 апреля 2019

Я изучаю Laravel и у меня есть проблема, которую я действительно не могу решить, несмотря на часы поисков в Google. У меня есть три таблицы - проекты, пользователи и руководители проектов. Я пытаюсь создать выпадающий список в проектах edit.blade, в котором будет отображаться имя менеджера проекта путем объединения user_id из таблицы менеджера проекта с идентификатором таблицы пользователей, однако я, очевидно, хочу, чтобы PM_ID был сохраняется, когда пользователь выбирает имя. Я попытался создать соединение в методе редактирования моего контроллера, но мне не повезло. Я установил все свои отношения в модели также, я думаю, что они правильные? Может кто-нибудь сказать мне, где я иду не так?

Моя таблица настроена следующим образом (я пропустил ненужные поля):

    Projects:
       ID, 
       Name, 
       PM_ID

    Users:
       ID, 
       Name

   Project Managers:
      ID, 
      User_ID

Контроллер проекта:

    $project_managers = DB::table('project_managers')
       ->join('users', 'users.id', '=', 'project_managers.user_id')
       ->select('users.name', 'project_managers.id')
       ->lists('users.name', 'project.managers.id')
       ->get();

   return view('admin.projects.edit', compact('project', 'project_managers'));

edit.blade:

    <div class="form-group">{!! Form::label('PM_id', 'Project Manager:') !!}{!! Form::select('PM_id', ['' => 'Choose a PM'], $project_managers, null, ['class'=>'form-control']) !!}</div>

Мои отношения:

Проект:

    public function project_manager(){
       return $this->belongsTo('App\ProjectManager');
    }

Управление проектами:

    public function user(){
       return $this->belongsTo('App\User');
     }

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

    public function project_manager(){
      return $this->belongsTo('App\ProjectManager');
     }

С этим кодом я получаю следующую ошибку:

      FatalThrowableError in AdminProjectsController.php line 97: Call to a member function get() on array

Любое направление по этому вопросу будет с благодарностью!

1 Ответ

0 голосов
/ 07 апреля 2019

Пусть Laravel выполняет тяжелую работу, используя отношения, которые вы установили.

$project_managers = \App\ProjectManager::with('user')->get();
$pms = [];
foreach($project_managers as $pm){
    $pms[$pm->id] = $pm->user->name;
}

Вы можете отправить $pms на просмотр, и выпадающий список должен работать на вас. Если бы отношения были один ко многим, вы могли бы использовать функцию pluck(), но я думаю, что простой цикл после db pull сделает то, что вам нужно здесь.

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