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 按子顺序排序的主要内容,如果未能解决你的问题,请参考以下文章

在laravel中按字母顺序排序集合

如何在 Laravel 中按字母顺序对记录进行排序

没有 HTML 表单的 Laravel 5 AJAX 排序顺序数据(jQuery 可排序)

PHP:按子数组的出现次数对多维数组进行排序

PHP按子数组值排序数组

php 使用完全匹配关键字laravel FMKS排序排序