【发布时间】:2021-10-01 20:42:17
【问题描述】:
我有这个查询,它工作得很好,除非我在上面调用->first() 函数,来自某些关系的数据消失了。
我想要达到的目标:
我正在尝试获取价格最低的 sp_services。 数据数组中的第一个对象(id:1)有两个 sp_service,数据数组中的第二个对象(id:13)只有一个 sp_services。当我这样做时$query->orderBy('sp_services.price', 'DESC')->first(); 第一个对象在那里,但第二个对象(id:6,名称:洗车)消失了,只有空数组。
在下面提到的 JSON 中,我只在此处显示相关数据。谁能告诉我我在这里做错了什么?为什么它不起作用。还有没有更好的方法来达到预期的效果。
查询:
$branchesQuery = SpBranch::query();
$branchesQuery->where('status', true);
$branchesQuery->when($request->filled('price'), function($query) use($request) {
return $query->with(['service_provider' => function($query) use($request) {
$query->whereHas('sp_services')
->with(['sp_services' => function($query) use($request) {
$query->orderBy('sp_services.price', 'DESC'); //->first();
}]);
}]);
});
$branches = $branchesQuery->paginate($perPageLimit);
return $branches;
型号:
class SpBranch extends Model
{
public function service_provider()
{
return $this->belongsTo(ServiceProvider::class, 'sp_id');
}
}
class ServiceProvider extends Model
{
public function sp_services()
{
return $this->hasMany(SpService::class, 'sp_id', 'id');
}
}
JSON:
{
"data": [
{
"id": 1,
"sp_id": 1,
"name": "Branch 01",
"status": 1,
"service_provider": {
"id": 1,
"name": "Service Provider 01",
"sp_services": [
{
"id": 3,
"sp_id": 1,
"branch_id": null,
"name": "Service 03",
"price": 50
},
{
"id": 4,
"sp_id": 1,
"branch_id": null,
"name": "Service 04",
"price": 70
}
]
}
},
{
"id": 13,
"sp_id": 5,
"name": "Branch 13",
"status": 1,
"service_provider": {
"id": 5,
"name": "Service Provider 05",
"sp_services": [
{
"id": 6,
"sp_id": 5,
"branch_id": null,
"name": "car wash",
"price": 300
}
]
}
}
]
}
【问题讨论】: