【发布时间】:2018-08-31 21:02:20
【问题描述】:
如何在 Eloquent 查询构建器中的关系上使用 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": []
}
]
}
知道如何实现这一目标吗?
我的 Eloquent 模型中有以下关系:
class Section extends Model
{
use BelongsToSortedManyTrait, SortableTrait;
public $fillable = [
'id',
'name',
'description',
'parent',
'position'
];
public static $rules = [
// create rules
'name' => 'required'
];
public function assessments() {
return $this->belongsToSortedMany('App\Models\Assessment');
}
public function subsections() {
return $this->hasMany(self::class, 'parent')->sorted();
}
}
class Assessment extends Model
{
public $fillable = [
'id',
'name',
'description'
];
public static $rules = [
// create rules
];
public function sections()
{
return $this->belongsToMany('App\Models\Section')->whereNull('parent')->sorted();
}
}
【问题讨论】:
-
你想达到什么目的?
-
@LeoinstanceofKelmendi 阅读帖子的第二行。
-
->get()->first();
-
@Indra 这没什么区别。
-
试试
public function firstSubsection() { return $this->model->with(['sections' => function ($q) { $q->first()->with(['subsections' => function ($q) { $q->first()}]); }])->first(); }[未测试]
标签: php laravel orm relationship