我有一个名为Test
的模型:
class Test extends Model
{
public $primaryKey = 'test_id';
public function questions ()
{
return $this->belongsToMany('App\Question', 'question_test', 'test_id', 'question_id');
}
}
这样的Question
模型:
class Question extends Model
{
public function tests ()
{
return $this->belongsToMany('App\Test', 'question_test', 'question_id', 'test_id');
}
}
如您所见,这两种模式之间存在ManyToMany
关系。
现在在控制器功能中,我希望得到一个特定的测试(通过id)并将其发送到视图。然后急切加载所有它的questions
相关模型并将其发送到另一个视图。像这样:
public function beginTest ($course_id, $lesson_id, $test_id)
{
$test = Test::find($test_id);
if ($test->onebyone) {
return view('main/pages/test/test-onebyone', compact('test'));
} else {
$test = $test->with('questions.options')->get();
return view('main/pages/test/test-onepage', compact('test', 'done_test_id'));
}
}
}
问题在于,当我使用with()
laravel方法来激发加载关系时,它会返回所有具有Question
关系的Test模型,而我只想获得所选Test
模型的关系。
你的解决方案是什么?
答案 0 :(得分:1)
您可以使用'懒惰的热切加载'。
$test->load('questions.options');
使用with
关闭模型实例将使其使用新构建器并导致执行新查询。