PHP Laravel 按子顺序排序
Posted
技术标签:
【中文标题】PHP Laravel 按子顺序排序【英文标题】:PHP Laravel order parent by child 【发布时间】:2022-01-01 02:44:43 【问题描述】:我正在尝试按它们的编号对两集进行排序。这是我的代码:
$neededEpisodes = SharedMethods::getAround($numbers);
$nearEpisodes = TheEpisode::where("seriesID", $seriesID)->whereHas('TheNumbers', function($q) use($neededEpisodes)
$q->whereIn('episodeNumber', $neededEpisodes);
);
echo $nearEpisodes->get()->toJson();
这将输出以下结果:
"nearEpisodes": [
"id": 16445,
"the_numbers": [
"episodeID": 16445,
"episodeNumber": 208
]
,
"id": 16487,
"the_numbers": [
"episodeID": 16487,
"episodeNumber": 210
,
"episodeID": 16487,
"episodeNumber": 211
]
]
问题是 The_Numbers 的顺序应该相反,从 210、211 开始,然后是 208。
所以我的预期输出应该是 id: 16487 然后是 16445。
我应该如何构建雄辩的查询来实现这一目标?
我的新输出:
nearEpisodes":
"1":
"id": 16503,
"episodeTitle": "Episodul 183",
"the_numbers": [
"episodeID": 16503,
"episodeNumber": 183
]
,
"0":
"id": 16190,
"episodeTitle": "Episodul 181",
"the_numbers": [
"episodeID": 16190,
"episodeNumber": 181
]
【问题讨论】:
【参考方案1】:您可以使用sortByDesc
的收集方法为:
$nearEpisodes = TheEpisode::where("seriesID", $seriesID)
->whereHas('TheNumbers', function($q) use($neededEpisodes)
$q->whereIn('episodeNumber', $neededEpisodes);
)
->with(['TheNumbers' => function($q) use($neededEpisodes)
$q->whereIn('episodeNumber', $neededEpisodes);
])
->get();
$nearEpisodes = $nearEpisodes->sortByDesc(function ($item)
return $item->the_numbers->max('episodeNumber');
)->values();
echo $nearEpisodes->toJson();
【讨论】:
调用未定义的方法 Illuminate\Database\Query\Builder::sortBy() 如果我使用 get() 没有错误,但结果仍然是升序:( 然后试试sortBy
。将sortByDesc
替换为sortBy
。然后再试一次。
同样的事情,没有任何变化。
我在您的查询中添加了with
,看看是否有帮助。以上是关于PHP Laravel 按子顺序排序的主要内容,如果未能解决你的问题,请参考以下文章