我有一个使用 vueJs 作为前端的 Laravel 项目,我需要自然地对相关模型进行排序。所以:
我有一个与Plannings 模型有hasMany关系的Project模型。我在项目的展示页面上显示所有计划。我需要按标题自然地对该页面上的计划进行排序。
目前我的代码看起来像这样(我在这里找到了排序解决方案):
项目控制器:
public function show(Project $project)
{
if (auth()->user()->id == $project->user_id || auth()->user()->hasPermissionTo('edit_users')) {
return New ProjectResource($project->load(['plannings' => function ($query) {
$query->orderByRaw('LENGTH(title)', 'ASC')
->orderBy('title', 'ASC');
}]));
} else {
return response()->json(['message' => 'Kein Zugriff'], 403);
}
}
项目资源:
public function toArray($request)
{
return [
'id' => $this->id,
'title' => $this->title,
'user_id' => $this->user_id,
'plannings' => PlanningResource::collection($this->whenLoaded('plannings')),
];
}
这适用于这样的示例标题:( 数组已经按排序结果的顺序排列)
$plannings = [
'Project #1',
'Project #2',
'Project #10',
'Project #11',
'Project Room 1 #1',
'Project Room 1 #2',
'Project Room 1 #11'
];
但是它不适用于像这样的标题:( 数组已经按照排序结果的顺序排列)
$plannings = [
'Gang 7 - 8m x 2m LPH 2,5m 300LUX',
'Gang 8 - 5m x 2m LPH 2,5m 300LUX',
'Gang 1 - 13m x 2m LPH 2,5m 300LUX',
'Gang 3 - 13m x 2m LPH 2,5m 300LUX',
'Gang 4 - 19m x 2m LPH 2,5m 300LUX',
'Gang 5 - 17m x 2m LPH 2,5m 300LUX',
'Gang 6 - 19m x 2m LPH 2,5m 300LUX',
'Gang 2 - 13m x 2m LPH 2,5m 300LUX #2'
];
所以我在想,也许我可以使用收集方法sortBy('key', SORT_NATURAL, true)
?
但是,我不知道如何在我的ProjectController
or中实现它ProjectResource
。有人知道这个问题的解决方案吗?