Laravel按特定字符串排序

时间:2016-08-01 09:31:46

标签: php laravel sql-order-by

我的 PostgreSQL 上的数据如下:

背景

id | Size
1  | small
2  | medium
3  | large

本领域

id | name       | background_id
1  | Shine      | 1
2  | Sun        | 3
3  | Mountain   | 3

我希望通过laravel雄辩的小型(小型,中型,大型)获取艺术数据顺序背景

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

如何解决?

FIELD(type, 'S', 'M', 'L', 'XL')

无效

2 个答案:

答案 0 :(得分:2)

您可以将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();

答案 1 :(得分:0)

我会在后台表中添加order字段,以便在添加新字段时无需更改代码即可更改。然后,您可以使用以下查询:

Art::with('background')
->orderBy('background.order')
->get();