如何在 eloquent 上使用 WHERE 来比较 table 中按年和月列创建的日期 Laravel?

How to use a WHERE on eloquent for comparing a date created by year and month column in a table for Laravel?

public function scopeStartsFrom(Builder $query, $month, $year): Builder
{
    return $query->addSelect(DB::raw("str_to_date(concat(year,'-',month,'-',1), '%Y-%m-%d') as carbon"))->where('carbon', '>=', Carbon::createFromDate($year, $month, 1));
}

我有一个 table 具有单独的年和月列。如何做到这一点,以便我可以将 year/month 列用于我可以用于我的范围的日期。那么,如果我输入 2000 年和 10 月,它会输出从该年和该月开始的所有行吗?谢谢!我正在使用 Laravel 8、Spatie 查询生成器和 MySQL.

年 |月 2009 | 12 2013 | 1个 2011 | 5个 2010 | 10

所以如果我输入 2010 年和 11 月,它只会输出第二行和第三行。

我觉得计算量太大了。 当你给出年份和月份时,只能进行两次比较。

  1. 如果年份大于给定,则日期肯定大于给定日期
  2. 如果年份相同但月份大于或等于。

所以我认为正确的查询应该是:

public function scopeStartsFrom(Builder $query, $month, $year): Builder
{
    return $query->addSelect(
        DB::raw("str_to_date(concat(year,'-',month,'-',1), '%Y-%m-%d') as carbon")
      )->where(function($q) use ($year, $month) {
        $q->where('year', '>', $year)
          ->orWhere([
            ['year', '>=', $year],
            ['month', '>=', $month]
          ]);
      });

    // Generated query: 
    SELECT * FROM table WHERE (year > 2022 OR (year >= 2022 AND month >= 4))
}