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();
}