Laravel按特定值对结果进行排序

14

我有这样一行代码,它从数据库获取结果:

'clanMembers' => User::find(Auth::user() -> clan_id) -> where('clan_id', '=', Auth::user() -> clan_id) -> orderBy('username') -> get()

目前它按用户名排序。我希望将其更改为按clan_rank字段排序。这个clan_rank字段只会包含3个不同的值。它们是:

1. Owner
2. Admin
3. Member
我希望我的结果首先按照拥有者,然后是管理员,最后是成员的顺序排序。我该如何更改代码才能实现这些结果?

我希望我的结果首先按照拥有者,然后是管理员,最后是成员的顺序排序。我该如何更改代码才能实现这些结果?

1个回答

67

你需要使用orderByRaw

而不是orderBy部分,你应该使用

orderByRaw("FIELD(clan_rank , 'Owner', 'Admin', 'Member') ASC");

如果“Owner”、“Admin”和“Member”存储为可由用户配置的数组值,并从数据库中检索结果(而不是硬编码),那该怎么办?在我的用例中,我在MySQL数据库中有一个名为“clan_rank_order”的列JSON属性类型字段,其中存储了用户排序优先级的顺序。 - skcin7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接