我想对表格条目进行排序。这是 Eloquent 模型。
namespace App;
use Illuminate\Database\Eloquent\Model;
/**
* App\Story
...
* @property string $due_date
* @property string $status late|scheduled|completed
...
*/
class Story extends Model {
...
}
我想要返回故事的顺序是:
- “迟到”是 ASC(年长者优先)
- 在 DSC 中“预定”(新的在前)
- 在 DSC 中“完成”(新的在前)
所以让我们假设在数据库中有 15 个条目对应故事的每种状态类型。分页限制设置为 20。
所以这是每个页面的响应
- 第一页:按 ASC 顺序排列的 15 个后期故事 + 按 DSC 顺序排列的前 5 个预定故事
- 第二页:剩余 10 个预定故事 + 前 10 个按 DSC 顺序完成的故事
- 第三页:剩余 5 个已完成的故事
如果上面提供的信息不充分,请告诉我。谢谢!
最佳答案
不理想,但在没有 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)
更快。
关于mysql - 根据列值在 Laravel 中自定义排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50758910/