【问题标题】:Query last one year - Laravel 5.8查询过去一年 - Laravel 5.8
【发布时间】:2020-01-26 03:08:18
【问题描述】:

我正在尝试查询过去一年的所有访客。

我试过了

$raw = Visitor
           ::whereDate('created_at','>', Carbon::now()->year-1)
           ->get()
           ->pluck('created_at');

注意:

Carbon::now()->year-1 //-------------> 2018

我不断在我的数据库中获取所有 vsiitor。

我做错了什么?

【问题讨论】:

    标签: php laravel laravel-5 laravel-5.8 laravel-query-builder


    【解决方案1】:
    $raw = Visitor::whereDate('created_at','>', Carbon::now()->subYear())->get()->pluck('created_at');
    

    当您执行Carbon::now()->year - 1 时,它会返回2018。 所以比较是这样完成的:2019-09-15 18:18:00 > 2018

    【讨论】:

      【解决方案2】:

      试试这个代码:

      $raw = Visitor::whereDate('created_at','>', Carbon::now()->addYears(-1))->get()->pluck('created_at');
      

      【讨论】:

      • 和我的有什么区别?
      • addDays()?为什么是天? addDays(-1)subDay() 不一样吗?
      【解决方案3】:

      试试这样:

      $raw = Visitor::select('created_at')
                ->whereDate('created_at','>', now()->subYear())
                ->get();
      

      请注意,这里我用select('created_at') 替换了->get()->pluck('created_at') 部分,因为您只需要该列的值。您的方法会在内存中获取所有结果,然后提取想要的值,替代方案只会为您带来您想要的元素。

      【讨论】:

      • @kyo 我已经更新了我的答案,忘记执行查询:D
      【解决方案4】:

      你可以简单地使用whereYear

      $data = User::query()
          ->whereYear('created_at', now()->year -1)
          ->get()
          ->pluck('created_at');
      

      whereYear - 方法可用于将列的值与特定年份进行比较。

      see more

      【讨论】:

        猜你喜欢
        • 2020-01-26
        • 1970-01-01
        • 1970-01-01
        • 2020-01-31
        • 1970-01-01
        • 2012-07-07
        • 2014-06-18
        • 1970-01-01
        • 2012-07-13
        相关资源
        最近更新 更多