【问题标题】:Retrive all rows from last month (Laravel + Eloquent)检索上个月的所有行(Laravel + Eloquent)
【发布时间】:2018-02-16 04:28:54
【问题描述】:

我正在尝试获取属于上个月的所有记录,到目前为止,我设法获取了上个月的所有记录,但到目前为止,我不确定如何仅获取上个月的记录

$revenueMonth = Callback::where('created_at', '>=', Carbon::today()->startOfMonth()->subMonth())->sum('payment');

【问题讨论】:

  • 您是否通过此查询获取上个月的记录列表?
  • 我正在获取从上个月开始到今天的所有记录,例如:2017-08-01 -> 2017-09-07 而不是 2017-08-01 -> 2017-08- 31
  • 所以你想告诉我,以便我可以提供帮助

标签: php mysql laravel eloquent php-carbon


【解决方案1】:

为您的问题提供更清晰的解决方案:

$revenueMonth = Callback::whereMonth(
    'created_at', '=', Carbon::now()->subMonth()->month
);

【讨论】:

  • 只想指出,这将采用最后一个月的整数并返回与该月匹配的所有年份的记录。假设现在是 11 月,Carbon 将返回“10”。因此,此查询将匹配 created_at = '2018-10-01 12:23:34' 并且它还将匹配 created_at = '2015-10-10 13:24:35'... 不是 just 上个月。它返回的 SQL 基本上是 where month(created_at) = 10.
【解决方案2】:

试试这个解决方案:

$revenueMonth = Callback::where(
    'created_at', '>=', Carbon::now()->subDays(30)->toDateTimeString()
);

您将获得过去 30 天的所有回调。

$revenueMonth = Callback::where(
    'created_at', '>=', Carbon::now()->firstOfMonth()->toDateTimeString()
);

获取当前月份。

$revenueMonth = Callback::where(
    'created_at', '>=', Carbon::now()->startOfMonth()->subMonth()->toDateString()
);

上个月开始。

更新

$revenueMonth = Callback::where(
    'created_at', '>=', Carbon::now()->subMonth()->toDateTimeString()
);

这就是你要找的:)

希望对你有帮助:)

【讨论】:

  • 我不是在寻找过去 30 天,而是上个月,例如:2017-08-01 -> 2017-08-31 而不是 2017-08-24 -> 2017 -09-7 :)
  • $revenueMonth = Callback::where( 'created_at', '>=', Carbon::now()->startOfMonth()->subMonth()->toDateString() );返回: 2017-09-07 09:46:43 2017-09-07 09:46:43 2017-09-07 09:46:43 2017-08-07 09:46:43 2017-09-02 09: 46:43 而我只是在寻找 2017-08-07 09:46:43
  • 嗯仍然无法按我的意愿工作:P。它返回 2017-09-07 09:46:43 2017-09-07 09:46:43 2017-09-07 09:46:43 2017-09-02 09:46:43 我正在寻找它返回记录:2017-08-07 09:46:43
【解决方案3】:

没有一个答案能让我到达我想要去的地方:(。

我有一个解决方案,但我认为它很难看,希望它可以变得更干净

$fromDate = Carbon::now()->subMonth()->startOfMonth()->toDateString();
$tillDate = Carbon::now()->subMonth()->endOfMonth()->toDateString();

$revenueLastMonth = Callback::whereBetween(DB::raw('date(created_at)'), [$fromDate, $tillDate])->get();

这将给出我正在寻找的结果,这是我的记录:

2017-09-07 09:46:43
2017-09-07 09:46:43
2017-09-07 09:46:43
2017-09-02 09:46:43
2017-08-07 09:46:43

我希望它只返回 2017 年 8 月 (2017-08-07 09:46:43) 的记录

【讨论】:

    【解决方案4】:

    更新 你的答案的雄辩版本

    $fromDate = Carbon::now()->subMonth()->startOfMonth()->toDateString();
    $tillDate = Carbon::now()->subMonth()->endOfMonth()->toDateString();
    
    $revenueLastMonth = Callback::whereBetween('created_at',[$fromDate,$tillDate])->get();
    

    【讨论】:

    • $revenueMonth = Callback::where('created_at', '>=', Carbon::today() ->startOfMonth()->subMonth(1)->toDateTimeString());返回: 2017-09-07 09:46:43 2017-09-07 09:46:43 2017-09-07 09:46:43 2017-08-07 09:46:43 2017-09-02 09: 46:43 而我只是在寻找 2017-08-07 09:46:43
    • 我已经编辑了我的答案检查它,如果仍然不起作用,请告诉我:)
    • 它仍然返回从 2017-08-07 09:46:43 到 2017-09-07 09:46:43 的所有内容,我自己添加了一个答案,但我认为它可以在一种不同的方式,只是不知道如何:)
    • 是的,我已经编辑了你和我的答案,尝试了文档中建议的雄辩方式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多