我正在学习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
对此,任何方向将不胜感激!
答案 0 :(得分:0)
让Laravel使用您建立的关系来完成繁重的工作。
$project_managers = \App\ProjectManager::with('user')->get();
$pms = [];
foreach($project_managers as $pm){
$pms[$pm->id] = $pm->user->name;
}
您可以将$pms
发送到视图,并且该下拉列表应该适合您。如果这种关系是一对多的,则可以使用pluck()
函数,但是我认为在数据库拉出后进行简单循环就可以满足您的需要。