在Laravel中显示两个表中的数据

时间:2019-04-06 23:56:47

标签: laravel laravel-5 join eloquent

我正在学习Laravel,但有一个问题,尽管经过数小时的搜寻,但我确实无法解决。我有三个表-项目,用户和项目经理。我正在尝试在项目edit.blade中创建一个下拉列表,该列表将通过将项目管理器表中的user_id连接到用户表的ID来显示项目管理器的名称,但是我显然希望PM_ID为用户选择名称时保存。我尝试在控制器的edit方法中创建联接,但是没有运气。我也在模型中建立了所有关系,我认为它们是正确的吗?有人可以告诉我我要去哪里了吗?

我的表设置如下(我忽略了无关字段):

    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');
    }

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 :(得分:0)

让Laravel使用您建立的关系来完成繁重的工作。

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

您可以将$pms发送到视图,并且该下拉列表应该适合您。如果这种关系是一对多的,则可以使用pluck()函数,但是我认为在数据库拉出后进行简单循环就可以满足您的需要。