我在一个表中有两个日期列,created_at和encountered_at。 我想要获得concountered_at比created_at少1周的所有行。 我该如何进行它而不做任何循环?
这是一个例子
id | encountered_at | created_at
1 | 2020-04-17 | 2020-04-23
2 | 2020-04-17 | 2020-04-24
3 | 2020-04-17 | 2020-11-29
前两个记录应该会出现。 我猜这是SQL中的straigt,我如何用口才实现这一点?
.。。
您可以使用whereRaw和dateDiff来实现。。。。
$result=MyModelClass::whereRaw('DATEDIFF(created_at,encountered_at)<=7')
select('*')->get();
请注意,这里的结果将包含diff小于或等于7天的行。。。如果您希望它仅为7天,您可以省略'<' 。。。。
通常,您希望选择*FROM表WHERE“diff OF concountered_at AND created_at LESS THAN 1 week”
-因此您希望计算差异,然后测试它小于一周。 我推荐以下mysql文档页面:https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_datediff
WhereBetween
方法验证列的值是否在两个值之间。
$from = date('2020-01-01');
$to = date('2020-05-02');
Model::whereBetween('date', [$from, $to])->get();
您可以使用碳对象检查两个日期之间的日期。您可以获取当前日期,然后获取日期之间的开始日期和结束日期,然后返回true,否则返回false。
$startDate = \Carbon\Carbon::createFromFormat('Y-m-d','2020-10-01');
$endDate = \Carbon\Carbon::createFromFormat('Y-m-d','2020-10-30');
$check = \Carbon\Carbon::now()->between($startDate,$endDate);
dd($check); // return true or false