Laravel:嵌套“with()”函数

时间:2014-11-03 20:11:42

标签: laravel eloquent

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

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

competencies表链接到courses表(competencies.course_id = course.id),competency_standards表链接到competencies表(competency_standards)。 compey_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
            )

        )
    )

)

但在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 
                )
            )
    )

...

这可能吗?我是以错误的方式解决这个问题吗?

1 个答案:

答案 0 :(得分:8)

应该可以使用:

 $coursesAndComps = Course::with('competencies', 'competencies.standards')
                   ->get()->toArray();

但当然您需要在standards模型中定义Competency关系,以便将CompetencyStandard

相关联