Laravel 合集 - 结果顺序

Laravel Collections - Results order

以下....

控制器:

public function treatmentsList()
    {
        $treatments = Treatment::with('category')->where('status', 1)->orderBy('medical_name')->get();
        $groups = $treatments->groupBy('category.name');
        return view('pages.treatments.list', compact( 'groups'));
    }

查看:

<ul>
    @foreach($groups as $category_name => $treatments)
        <li>
            <h4>{{ $category_name }}</h4>
            <ul>
                @foreach($treatments as $treatment)
                    <li>
                        <h5>{{ $treatment->medical_name }}</h5>
                    </li>
                @endforeach
            </ul>
        </li>
    @endforeach
</ul>

给我...

治疗按其类别和字母顺序分组,但类别未按字母顺序排列。

- Category B
Treatment A
Treatment B
Treatment C

- Category A
Treatment A
Treatment B

- Category C
Treatment A
Treatment B
Treatment C
Treatment D

如何获得按字母顺序列出的治疗方法和类别?

您可以通过为预加载查询添加查询约束来实现:

Treatment::with(['category' => function ($query) { 
    $query->orderBy('name');
}])
->where('status', 1)
->orderBy('medical_name')
->get();

嗨,

我不确定这是否是您的意思...但它没有用...我仍然得到未按字母顺序列出的类别。

public function treatmentsList()
{
    $treatments = Treatment::with(['category' => function ($query) {
        $query->orderBy('name');
    }])
        ->where('status', 1)
        ->orderBy('medical_name')
        ->get();
    $groups = $treatments->groupBy('category.name');
    return view('pages.treatments.listA', compact( 'groups'));
}

你是对的 - 我错了。我认为答案是连接查询:

public function treatmentsList()
{
    $treatments = Treatment::with('category')
        ->select('treatment.*')
        ->join('category', 'category.id', '=', 'treatment.category_id')
        ->where('treatment.status', 1)
        ->orderBy('category.name')
        ->orderBy('treatment.medical_name')
        ->get();
    $groups = $treatments->groupBy('category.name');
    return view('pages.treatments.listA', compact( 'groups'));
}

检查上面示例中的表名和字段名。这应该有效。