laravel中特定模型关系的急切负载

时间:2016-07-10 10:26:40

标签: php laravel

我有一个名为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模型的关系。

你的解决方案是什么?

1 个答案:

答案 0 :(得分:1)

您可以使用'懒惰的热切加载'。

$test->load('questions.options');

使用with关闭模型实例将使其使用新构建器并导致执行新查询。