按created_at排序与Eloquent模型不兼容

3
我在使用 Eloquent Models 时,尝试按照 created_at 列来排序记录时遇到了一些问题。排序可以按照日期进行,但无法按照时间进行。例如,如果我有三条记录,它们的 created_at 值如下:
  • 2017-07-04 07:16:33

  • 2017-07-04 05:35:01

  • 2017-07-04 05:27:48

    无论是使用 orderby('created_at', 'desc') 还是 'asc',输出结果都相同。但是,如果我有如下记录:

  • 2017-07-04 05:27:48

  • 2017-07-03 06:35:50

当我使用原始查询时,排序也可以正常工作。这个问题只出现在我使用 Eloquent Model 时。

是否有人知道为什么会出现这种情况?提前感谢您的帮助。


@AhmadMobaraki 这是我在控制器中的代码:$connections = Connection::orderBy('created_at', 'desc')->paginate(10); - Katerina
@AhmadMobaraki 这是我迁移文件中的模式: Schema::create('connections', function (Blueprint $table) { $table->increments('id'); $table->integer('user_id')->unsigned(); $table->integer('offer_id')->unsigned(); $table->timestamps(); $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); $table->foreign('offer_id')->references('id')->on('offers')->onDelete('cascade'); }); - Katerina
@AhmadMobaraki 我尝试了帖子中提供的解决方案,但它仍然不能按照降序排列记录,当使用分页时,它只获取最后 10 条记录。即使我使用 get 而不是 paginate,orderby 也没有按照应有的方式工作。 - Katerina
尝试这个:$connections = Connection::latest('created_at')->paginate(10); - Leo
@Katerina,能否请您分享一下您的控制器方法代码? - Jahid Mahmud
显示剩余9条评论
2个回答

1

哦,我的错!我解决了这个问题,不是在服务器端获取数据时出了问题,而是在客户端使用“dataTables”时出了问题。


1
请问您能否解释一下实际问题是什么?我也遇到了同样的问题。 - Umer

0

不确定您使用的 Laravel 版本。但最好将 PHP 中的日期时间值转换为 Carbon 类型以进行排序和过滤。请先尝试转换这些值,然后再对它们进行排序。祝您的代码好运。

此致

敬礼

Andy Ba


我使用Laravel 5.3,虽然我对Laravel还很陌生,但是当使用Eloquent Models的orderBy时,它会默认按照记录的方式进行排序。无论如何还是谢谢。 - Katerina

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接