Php Laravel 5.5检索嵌套关系中的第一条记录

Php Laravel 5.5检索嵌套关系中的第一条记录,php,laravel,orm,relationship,Php,Laravel,Orm,Relationship,如何在雄辩的查询生成器中对关系使用first()方法 我只想返回第一节和该节中的第一小节 我的评估服务中有以下问题: public function firstSubsection() { return $this->model->with(['sections.subsections' => function ($q) { $q->take(1); }])->first(); } 这

如何在雄辩的查询生成器中对关系使用
first()
方法

我只想返回第一节和该节中的第一小节

我的评估服务中有以下问题:

public function firstSubsection()
    {
        return $this->model->with(['sections.subsections' => function ($q) {
                $q->take(1);
        }])->first();
    }
这将返回多个部分:

 {
        "id": 1,
        "name": "Assessment 1",
        "description": "<p>Some description</p>",
        "created_at": "2018-03-09 17:14:43",
        "updated_at": "2018-03-09 17:14:43",
        "sections": [
            {
                "id": 5,
                "name": "Section 1",
                "description": null,
                "parent": null,

                "created_at": "2018-03-09 17:14:52",
                "updated_at": "2018-03-09 17:14:52",
                "pivot": {
                    "assessment_id": 1,
                    "section_id": 5
                },
                "subsections": [
                    {
                        "id": 6,
                        "name": "Subsection 1",
                        "description": "<p>Lorem ipsum dolor sit amet<br>\r\n</p>",
                        "parent": 5,
                        "position": 6,
                        "created_at": "2018-03-09 17:15:08",
                        "updated_at": "2018-03-21 11:40:10"
                    }
                ]
            },
        {
            "id": 10,
            "name": "Section 2",
            "description": null,
            "parent": null,
            "position": 10,
            "created_at": "2018-03-20 14:34:50",
            "updated_at": "2018-03-20 14:34:50",
            "pivot": {
                "assessment_id": 1,
                "section_id": 10
            },
            "subsections": []
        }
    ]
}

我不确定这是否有效,但您可以尝试以下逻辑:

如果要加载模型的第一部分和子部分,应在模型中创建新关系:

public function firstSectionOnly()
{
    return $this->hasOne(Section::class)->orderBy('id', 'asc');
}
部分中定义模型

public function firstSubSectionOnly()
{
    return $this->hasOne(Subsection::class)->orderBy('id', 'asc');
}
然后,您可以将其加载到当前模型中:

public function firstSubsection()
{
    return $this->model->with(['firstSectionOnly.firstSubSectionOnly'])->first();
}
试过这个之后。告诉我它正在工作或有错误。

Take(1)
first()。但这仍然不是问题。删除
take(1)
并在
first()之后添加
->get()


试试看。

最后我不得不这样做:

public function firstSubsection()
    {
        return $this->model->with(['sections' => function ($q) {
            $q->with(['subsections' => function ($q) {
                $q->first();
            }
            ])->first();
        }])->first();
    }

感谢@ab_in为我指引了正确的方向。

你想实现什么?@LeoinstanceofKelmendi阅读了文章的第二行。->get()->first()@试着使用(['sections'=>function($q){$q->first()->函数($q){$q->first()->函数(['subsections'=>function($q){$q->first()};}])->first();}
[未测试]它仍然返回多个节。然而,它只返回一个小节。但我需要它只返回一个部分。这是一个JSON API,所以很遗憾,我不能使用即时加载。这仍然返回多个部分。
public function firstSubsection()
{
    return $this->model->with(['firstSectionOnly.firstSubSectionOnly'])->first();
}
public function firstSubsection()
    {
        return $this->model->with(['sections' => function ($q) {
            $q->with(['subsections' => function ($q) {
                $q->first();
            }
            ])->first();
        }])->first();
    }