【问题标题】:Order by date in different columns in Laravel在 Laravel 的不同列中按日期排序
【发布时间】:2020-09-24 22:16:10
【问题描述】:

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

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

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

这是我的代码:

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

【问题讨论】:

  • 好吧,如果您的month 列是包含月份文本的varchar,那么它当然会按字母顺序排列……这似乎是存储日期的一种非常糟糕的方式。您应该存储datedatetimetimestamp,并使用DATE_FORMAT 之类的函数来获取月、日、年等。
  • 月份是数字还是字符串?如果它是一个字符串,您将必须构建自定义排序逻辑。您是否有特定原因不使用日期时间而不是单独的列?
  • 它是一个字符串。我仍在学习如何做后端以及我的老师告诉我们将它们分开的方法。通过它也更容易获得月报和日报

标签: laravel eloquent


【解决方案1】:

首先:我必须说您应该将日期信息存储在数据库中的日期时间列中,就像 Tim Lewis 在评论中所说的那样......

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

$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

【讨论】:

  • 好的,如果这不起作用,我可能会尝试将所有内容都转换为日期时间。可以订购desc吗?我尝试添加desc,但它不起作用。
  • 请看这个,我有关于你需要什么的一般信息:stackoverflow.com/a/40529488/10573560
  • 如果要使用字段方式对 desc 进行排序,则应反转字段值:December,November ... ex
  • 抱歉回复晚了,我似乎无法根据您提供的参考资料进行 groupBy 工作,所以我只是手动使用了orderBy
  • 我会接受的。非常感谢您的帮助和时间
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-02
  • 2016-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-12
相关资源
最近更新 更多