如何使用 Eloquent 中的 "with" 子句对我的结果进行排序?
How can I order my results with "with" clause in Eloquent?
我想按 with 子句的第一个结果对我的类别进行排序。
例如有 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
});
我想按 with 子句的第一个结果对我的类别进行排序。
例如有 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
});