为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel sortBy() 基于字符串值

Laravel sortBy() 基于字符串值

PHP
侃侃尔雅 2022-01-02 20:12:41
在我的 Laravel 应用程序中,衬衫有多种尺寸:public function sizes(){    return $this->hasMany(\App\Size::class, 'size_id');}尺寸有一个称为nameSM、MD、LG、XL、XXL 等的属性。我想sortBy()在 eloquent 关系后附加 a ,以便尺寸始终按从 SM 到 XXL 的顺序出现。是否可以根据字符串值编写排序?我只是根据一个值是否大于另一个值来编写它们,但这显然不适用于这里。
查看完整描述

1 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

结果可以使用字符串按字符串排序case:


 public function sizes(){

        return $this->hasMany(\App\Size::class, 'size_id')->orderByRaw(DB::raw("

        CASE name WHEN 'SM' THEN 1

               WHEN 'MD' THEN 2

               WHEN 'LG' THEN 4

               WHEN 'XL' THEN 5

               WHEN 'XXL' THEN 6

     ELSE 7 END ASC"));

    }

有更短的选项,但它们不适用于每个数据库实现:


Mariadb:https ://mariadb.com/kb/en/library/find_in_set/

Mysql:https : //dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_find-in-set

mysql


在find_in_setMySQL的应该是这样的:


return $this->hasMany(\App\Size::class, 'size_id')->orderByRaw(DB::raw("find_in_set(name,'SM','MD','LG','XL', 'XXL')"));

玛丽亚数据库


return $this->hasMany(\App\Size::class, 'size_id')->orderByRaw(DB::raw("find_in_set(name,'SM,MD,LG,XL,XXL')"));


查看完整回答
反对 回复 2022-01-02
  • 1 回答
  • 0 关注
  • 241 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信