Cam*_*ott 1 php laravel laravel-5
在我的 Laravel 应用程序中,衬衫有多种尺寸:
public function sizes()
{
return $this->hasMany(\App\Size::class, 'size_id');
}
Run Code Online (Sandbox Code Playgroud)
尺码有一个属性name,可以是 SM、MD、LG、XL、XXL 等。
我想sortBy()在雄辩的关系中添加 a,以便尺寸始终按从 SM 到 XXL 的顺序出现。
是否可以编写基于字符串值的排序?我只是根据一个值是否大于另一个值来编写它们,但这显然不适用于这里。
可以使用以下字符串对结果进行排序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"));
}
Run Code Online (Sandbox Code Playgroud)
还有更短的选项,但它们并不适用于每个数据库实现:
mysql
for find_in_setmysql 看起来像这样:
return $this->hasMany(\App\Size::class, 'size_id')->orderByRaw(DB::raw("find_in_set(name,'SM','MD','LG','XL', 'XXL')"));
Run Code Online (Sandbox Code Playgroud)
玛丽亚数据库
return $this->hasMany(\App\Size::class, 'size_id')->orderByRaw(DB::raw("find_in_set(name,'SM,MD,LG,XL,XXL')"));
Run Code Online (Sandbox Code Playgroud)