Laravel Eloquent 如何在 Postgresql 中使用 DATE_FORMAT

Posted

技术标签:

【中文标题】Laravel Eloquent 如何在 Postgresql 中使用 DATE_FORMAT【英文标题】:Laravel Eleqent How to use DATE_FORMAT in Postgresql 【发布时间】:2019-10-01 18:43:22 【问题描述】:

我正在编写一个查询来获取按 created_at 分组的记录,下面是我的查询。

$q = Post::where('user_id', '=', auth()->user()->id)
                ->orderBy('created_at', 'desc')
                ->groupBy(DB::raw("DATE_FORMAT(created_at, '%Y-%m-%d')"))
                ->take(10)
                ->get(array(
                    DB::raw('Date(created_at) as date'),
                    DB::raw('COUNT(id) as "views"')
                ))->reverse()

这在 mysql 上运行没有任何错误,但是当我使用 postgresql 在 heroku 上推送代码时,我得到错误:

ERROR:  function date_format(timestamp without time zone, unknown) does not exist

【问题讨论】:

是否应该在 MySQL 和 PostgreSQL 上运行相同的代码? 【参考方案1】:

我知道这已经很晚了,但是如果有人仍然在这里寻找答案是如何在 Postgresql 中获取日期,您可以使用 field_name::date,例如 created_at::date

上面的查询可以写成

DB::select("select created_at::date, COUNT(id) as views from post where user_id = ".auth()->user()->id." group by created_at::date order by created_at desc Limit 10");

【讨论】:

以上是关于Laravel Eloquent 如何在 Postgresql 中使用 DATE_FORMAT的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Laravel 的 Eloquent 实现单表继承?

如何在 Laravel 中使用多表查询而不使用 Eloquent 关系

Eloquent:find() 和 where() 用法 laravel

分类 slug + post slug Laravel Eloquent

Laravel Eloquent 如何在 Postgresql 中使用 DATE_FORMAT

Laravel - Eloquent:使用用户发布表从用户那里获取帖子