Laravel按特定字符串排序

3

我有一些关于我的 PostgreSQL 数据的信息:

背景

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

艺术

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

我希望使用 Laravel Eloquent 按照背景值从小到大的顺序获取艺术数据,其中大小分为小、中、大。
Art::with( [ 'background' => function( $background ) {
    $background->oderBy( DB::raw( "what is this?" ) );
} ] )->get();

如何解决这个问题?
FIELD(type, 'S', 'M', 'L', 'XL')

无法工作。
2个回答

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();

0

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

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

它显示错误SQLSTATE [42P01]:未定义的表:7 ERROR:缺少FROM子句条目的表。 - Yudi Yohanes Septian Gotama
你在 Art 模型中设置了 $table 属性吗? - Jerodev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接