Laravel 按特定字符串排序

Yud*_*ama 3 php sql-order-by laravel

我的PostgreSQL上有这样的数据:

背景

id | Size
1  | small
2  | medium
3  | large
Run Code Online (Sandbox Code Playgroud)

艺术

id | name       | background_id
1  | Shine      | 1
2  | Sun        | 3
3  | Mountain   | 3
Run Code Online (Sandbox Code Playgroud)

我想通过 laravel eloquent 从小(小,中,大)的值获取艺术数据 orderBy 背景

Art::with( [ 'background' => function( $background ) {
    $background->oderBy( DB::raw( "what is this?" ) );
} ] )->get();
Run Code Online (Sandbox Code Playgroud)

如何修复它?

FIELD(type, 'S', 'M', 'L', 'XL')
Run Code Online (Sandbox Code Playgroud)

不管用

Tim*_*sen 6

您可以使用CASE WHEN表达式orderByRaw():

$queryOrder = "CASE WHEN Size = 'small' THEN 1 ";
$queryOrder .= "WHEN Size = 'medium' THEN 2 ";
$queryOrder .= "ELSE 3 END";
Art::with('background')
->orderByRaw($queryOrder);
->get();
Run Code Online (Sandbox Code Playgroud)