Laravel sortBy() 基于字符串值

在我的 Laravel 应用程序中,衬衫有多种尺寸:


public function sizes()

{

    return $this->hasMany(\App\Size::class, 'size_id');

}

尺寸有一个称为nameSM、MD、LG、XL、XXL 等的属性。


我想sortBy()在 eloquent 关系后附加 a ,以便尺寸始终按从 SM 到 XXL 的顺序出现。


是否可以根据字符串值编写排序?我只是根据一个值是否大于另一个值来编写它们,但这显然不适用于这里。


侃侃尔雅
浏览 242回答 1
1回答

江户川乱折腾

结果可以使用字符串按字符串排序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-setmysql在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')"));
打开App,查看更多内容
随时随地看视频慕课网APP