如何使用 Eloquent 中的 "with" 子句对我的结果进行排序?

How can I order my results with "with" clause in Eloquent?

我想按 with 子句的第一个结果对我的类别进行排序。

例如有 3 个类别,每个类别包含预站:

  1. 动物:{狗、猫、马}
  2. 食物:{汉堡、牛排、沙拉}
  3. 车辆:{汽车、摩托车、自行车}

如果我的搜索查询是 汽车 我想要我的 collection return :

但是我不知道该怎么做,有人可以帮我吗?

我无法解释得更好...

谢谢!

        $search = $request->search ?? '';

        $categories = Category::with(['prestations' => function($query) use($search){
            $query->where('prestation', 'LIKE', '%' . $search . '%');
        }])
        //order by the categories with first result ?
        ->get();

Eloquent 关系是使用单独的查询检索的,该查询发生在检索主模型的查询之后,因此无法根据关系查询中获得的值对主查询结果进行排序。在您的特定用例中,您可以在检索结果后进行排序:

$search = $request->search ?? '';

$categories = Category::with(['prestations' => function($query) use($search){
    $query->where('prestation', 'LIKE', '%' . $search . '%');
}])
->get()
->sortBy(function (Category $category) {
     return $category->prestations->count(); // Or any other sort criteria you want
});