Laravel:嵌套"with()"函数

sup*_*led 4 laravel eloquent

我想从三个表中检索数据:课程,能力和能力标准.以下查询几乎可以工作,但它不会带回关联的competency_standards表数据.

    $coursesAndComps = Course::with(
        array('competencies' => function($query)
        {
            Competency::with('competency_standards');
        })
    )->get()->toArray();
Run Code Online (Sandbox Code Playgroud)

competencies表链接到courses表(competencies.course_id = course.id)和competency_standards表链接到competencies表(competency_standards.competencey_id = competency.id).

返回的数组如下所示:

Array
(
[0] => Array
    (
        [id] => 1
        [name] => the first course
        [competencies] => Array
        (
            [0] => Array
            (
                [id] => 9
                [course_id] => 1
                [name] => first course comp 1 
            )

            [1] => Array
            (
                [id] => 10
                [course_id] => 1
                [name] => first course comp 2
            )

        )
    )

)
Run Code Online (Sandbox Code Playgroud)

但是在competencies数组中,我希望找到另一个这样的数组competency_standards:

...

[0] => Array
    (
        [id] => 9
        [course_id] => 1
        [name] => first course comp 1 
        [competency_standards] => Array
            (
                [0] => Array
                (
                    [id] => 22
                    [competency_id] => 9
                    [name] => standard foo 
                )
                [1] => Array
                (
                    [id] => 23
                    [competency_id] => 9
                    [name] => standard bar 
                )
            )
    )
Run Code Online (Sandbox Code Playgroud)

...

这可能吗?我是以错误的方式来做这件事的吗?

Mar*_*łek 12

应该可以使用:

 $coursesAndComps = Course::with('competencies', 'competencies.standards')
                   ->get()->toArray();
Run Code Online (Sandbox Code Playgroud)

当然,你需要有确定standards的关系Competency模型链接CompetencyStandard

  • 你甚至不需要首先指定`competencies`,只需'with('competencies.standards')就足够了. (3认同)