在Laravel的不同列中按日期排序

在Laravel的不同列中按日期排序,laravel,eloquent,Laravel,Eloquent,在拉雷维尔7号,我似乎不知道如何按月订购。我对月、日、年和时间使用不同的列,它不是按月份排序,而是按字母顺序排列月份 预期结果:一月、二月、三月、四月 实际结果:四月、二月、一月、三月 这是我的代码: $ledgers = Ledger::orderBy('month', 'DESC') ->orderBy('day', 'DESC') ->orderBy('year', 'DESC') ->orderBy

在拉雷维尔7号,我似乎不知道如何按月订购。我对月、日、年和时间使用不同的列,它不是按月份排序,而是按字母顺序排列月份

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

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

这是我的代码:

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

首先:我必须说,你们应该像蒂姆·刘易斯在评论中说的那个样,将你们的日期信息存储在数据库的datetime列中

无论如何 您可以使用“按字段排序”,这种排序使结果根据您提供的字段排序

$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);
请参阅:


好吧,如果您的
month
列是一个
varchar
列,其中包含该月的文本,那么它当然会按字母顺序排列。。。这似乎是存储日期的一种非常糟糕的方式。您应该存储
日期
日期时间
时间戳
,并使用
日期格式
等功能获取月、日、年等。月份是数字还是字符串?如果是字符串,则必须构建自定义排序逻辑。您不使用datetime而不是单独的列有什么具体原因吗?它是一个字符串。我仍在学习如何做后端,以及我的老师告诉我们如何将它们分开。通过itOkay也更容易获得月度和每日报告,如果这不起作用,我可能会尝试将所有内容转换为datetime。可以按顺序订购吗?我尝试添加
desc
,但它不起作用。请看这个,我有关于您需要什么的一般信息:如果您想使用字段方式对desc进行排序,您应该反转字段值:12月、11月。。。很抱歉回复太晚,我似乎无法根据您提供的参考使groupBy正常工作,所以我只是手动使用了
orderBy
我接受。非常感谢你的帮助和时间