0

我有一个使用 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)

但是,我不知道如何在我的ProjectControlleror中实现它ProjectResource。有人知道这个问题的解决方案吗?

4

0 回答 0