首页 > 解决方案 > 根据列值在 Laravel 中自定义排序

问题描述

我想对表格条目进行排序。这是雄辩的模型。

namespace App;

use Illuminate\Database\Eloquent\Model;

/**
 * App\Story
 ...
 * @property string $due_date
 * @property string $status late|scheduled|completed
 ...
 */
class Story extends Model {
    ...
}

我要返回故事的顺序是:

所以让我们假设每个状态类型的故事在 db 中有 15 个条目。并且分页限制设置为 20。

所以这是每个页面的响应

如果上面提供的信息不充分,请告诉我。谢谢!

标签: mysqlsqldatabaselaraveleloquent

解决方案


不理想,但没有factor列可以工作:

Story::orderByRaw('FIELD(status, "late", "scheduled", "completed")')
    ->orderByRaw('(CASE WHEN status = "late" THEN 1 ELSE -1 END) * due_date')
    ->paginate(10);

乘以整数时,due_date自动转换为字符串 ( 20180609)。所以它应该比timestamp(due_date).


推荐阅读