【问题标题】:how to group news or post by year and month in laravel如何在 laravel 中按年和月对新闻或帖子进行分组
【发布时间】:2019-09-13 15:12:14
【问题描述】:

我想按年和月对帖子或新闻进行分组,我该怎么做呢

以这种格式为例

2019 年 4 月 [发布 1,发布 2] 可能 [发布 1,发布 2]

2018 年 4 月 [发布 1,发布 2] 可能 [发布 1,发布 2]

【问题讨论】:

  • 显示您的代码。
  • 这些帖子是否存储在数据库中?如果是这样,您使用的是什么数据库以及日期使用的是什么字段类型?您能展示到目前为止您尝试过的任何代码吗?
  • 是存储在mysql数据库中的帖子,日期列是posts_date(DATETIME),到目前为止我唯一能做的就是按年或月分组。

标签: php mysql sql laravel


【解决方案1】:

你可以使用 laravel eloquent 和 Carbon 的组合

use Carbon\Carbon;
$news = New::select('id', 'title', 'created_at')
->get()
->groupBy(function($date) {
    return Carbon::parse($date->created_at)->format('Y');
});

【讨论】:

  • 然后将它们按年份分组,我需要年份和年内月份
【解决方案2】:

默认情况下,我们只能使用主键进行分组。如果你想通过其他属性添加分组,你必须通过在config/database.php上添加以下代码来启用ONLY_FULL_GROUP_BY sql 模式

'mysql' => [
    .....
    'modes' => [
        'ONLY_FULL_GROUP_BY',
    ],

推荐模式:

'STRICT_ALL_TABLES',
'ERROR_FOR_DIVISION_BY_ZERO',
'NO_ZERO_DATE',
'NO_ZERO_IN_DATE',
'NO_AUTO_CREATE_USER',
'NO_ENGINE_SUBSTITUTION',

启用该模式后,您可以在此处尝试查询,该查询按年和月返回结果组。

DB::table('posts')->groupBy([DB::raw("MONTH(posts_date)"), DB::raw("YEAR(posts_date)")])
->get();

希望对你有帮助

【讨论】:

  • 它返回错误:语法错误或访问冲突:1055 SELECT 列表的表达式#1 不在 GROUP BY 子句中并且包含非聚合列
  • 这将返回每年的 1 个帖子,而不是每年的所有帖子。
猜你喜欢
  • 1970-01-01
  • 2020-03-22
  • 1970-01-01
  • 2020-07-22
  • 2016-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多