首页 > 解决方案 > 在 Laravel 的不同列中按日期排序

问题描述

我似乎无法在 Laravel 7 中按月排序。我对月、日、年和时间使用不同的列,而不是按月排序,而是按字母顺序对月份进行排序。

预期结果:一月、二月、三月、四月

实际结果:四月、二月、一月、三月

这是我的代码:

$ledgers = Ledger::orderBy('month', 'DESC')
            ->orderBy('day', 'DESC')
            ->orderBy('year', 'DESC')
            ->orderBy('time', 'DESC')
            ->where('user_id', auth()->user()->id)
            ->paginate(8);

标签: laraveleloquent

解决方案


首先:我必须说你应该像蒂姆刘易斯在评论中所说的那样将你的日期信息存储在日期时间列中的数据库中......

您可以使用按字段排序的任何方式,这种顺序使结果根据您提供的字段排序...

$ledgers = Ledger::orderByRaw('FIELD(month,'January','February','March','May', 'June','July','August','September','October','November','December')')
            ->orderBy('day', 'DESC')
            ->orderBy('year', 'DESC')
            ->orderBy('time', 'DESC')
            ->where('user_id', auth()->user()->id)
            ->paginate(8);

请参见:

https://stackoverflow.com/a/9378709/10573560


推荐阅读