我最近问了一个关于定义多对多关系的问题(使用belongsToMany),这是一个巨大的帮助。所以现在在我的模特中我有:
用户模型
public function subjects()
{
return $this->belongsToMany('App\Subject', 'users_subjects', 'user_id', 'subjects_id');
}
主题模型
public function users()
{
return $this->belongsToMany('App\User', 'users_subjects', 'subject_id', 'user_id');
}
这样我就可以通过users
表在subjects
和users_subjects
之间建立关系。我的下一步是创建一个控制器,SubjectsController,最终看起来像这样:
class SubjectsController extends Controller
{
// returns the view where subjects will be displayed
public function index()
{
return view('profiles.professor.prof_didactic_subjects');
}
// get users with subjects
public function getSubjects()
{
$subjects = User::with('subjects')->get();
}
// get a single user with a subject
public function getSubject($id)
{
$materia = User::where('id', '=', $id)->with('subjects')->first();
}
}
我不太确定控制器中的代码。
最后一步是让我变得棘手,即使在阅读文档之后:我想将每个结果传递给视图,因此我可以有多个图块,每个图块都填充了与用户关联的主题的数据: / p>
@foreach ($subjects as $subject)
<div class="tile is-parent">
<article class="tile is-child box">
<p class="title">{{ $subject['name'] }}</p>
<div class="content">
<p>{{ $subject['description'] }}</p>
</div>
</article>
</div>
@endforeach
我尝试了许多不同的路由配置,但不断获取未定义的变量错误或尝试访问非对象错误。
这里有什么正确的行动方案?我觉得我错过了一些非常基本的东西。提前感谢您的帮助。
答案
@ Sohel0415提供的解决方案完美无缺。控制器上的index()
方法现在看起来像这样:
public function index()
{
// temporary value while I figure out how to get the id of the current user
$user_id = 6;
$subjects = Subject::whereHas('users', function($q) use ($user_id){
$q->where('user_id', $user_id);
})->get();
return view('profiles.professor.prof_didactic_subjects')->with('subjects', $subjects);
}
我的路线如下:
Route::get('/professor', 'SubjectsController@index');
我很丢失,所以这绝对救了我,再次感谢:)
答案 0 :(得分:2)
您需要将$subjects
传递给view
。你可以使用compact()
方法 -
public function index()
{
$subjects = Subject::with('users')->get();
return view('profiles.professor.prof_didactic_subjects', compact('subjects'));
}
或使用{ - 1}}方法,如 -
with()
如果您希望获得特定public function index()
{
$subjects = Subject::with('users')->get();
return view('profiles.professor.prof_didactic_subjects')->with('subjects', $subjects);
}
的{{1}},请使用Subject
-
user_id