Laravel 按特定字符串排序
Laravel Order By Specific String
我的 PostgreSQL 上有这样的数据:
背景
id | Size
1 | small
2 | medium
3 | large
艺术
id | name | background_id
1 | Shine | 1
2 | Sun | 3
3 | Mountain | 3
我想通过它的值从小(小,中,大)获得艺术数据 orderBy background laravel eloquent
Art::with( [ 'background' => function( $background ) {
$background->oderBy( DB::raw( "what is this?" ) );
} ] )->get();
如何解决?
FIELD(type, 'S', 'M', 'L', 'XL')
不工作
您可以将 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();
我会在背景中添加一个 order
字段 table 以便在添加新字段时无需更改代码即可更改排序。然后,您可以使用以下查询:
Art::with('background')
->orderBy('background.order')
->get();
我的 PostgreSQL 上有这样的数据:
背景
id | Size
1 | small
2 | medium
3 | large
艺术
id | name | background_id
1 | Shine | 1
2 | Sun | 3
3 | Mountain | 3
我想通过它的值从小(小,中,大)获得艺术数据 orderBy background laravel eloquent
Art::with( [ 'background' => function( $background ) {
$background->oderBy( DB::raw( "what is this?" ) );
} ] )->get();
如何解决?
FIELD(type, 'S', 'M', 'L', 'XL')
不工作
您可以将 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();
我会在背景中添加一个 order
字段 table 以便在添加新字段时无需更改代码即可更改排序。然后,您可以使用以下查询:
Art::with('background')
->orderBy('background.order')
->get();