Laravel Carbon,查询数据库,其中实地日期比其本身少2周

时间:2018-10-01 09:12:54

标签: php laravel php-carbon laravel-query-builder

我有一个选举模型,我正在尝试编写一个查询,向我显示特定结果。

这个想法很简单:

选举starting_date,例如,是15/10/2018。

我需要查询以显示将在接下来的2周内开始的所有elections

对于这个特定情况,我的意思是今天是01/10/2018,所以我需要所有在01/10/2018 - 15/10/2018期开始的选举。

所以,我试图写类似的东西:

public function notificationBeforeCollection() {
    return $this->activeElections()
        ->where('start_collection', '>=', Carbon::now()
        ->subDays(14)->format('Y-m-d'))
        ->where('start_collection', '<', Carbon::now()
        ->format('Y-m-d'));
}

但是它不起作用,并且通过将starting_date与今天进行比较,看来它不起作用。看来我需要写一些类似的东西:

where('starting_date', '>=', 'starting_date'->subDays(14);

如果我是对的,有没有办法针对查询生成器中的字段使用Carbon

2 个答案:

答案 0 :(得分:2)

您的实际查询正在查找14天前开始的所有选举。

您需要执行以下操作:

 return $this->activeElections()->where('start_collection', '>', Carbon::today())
          ->where('start_collection', '<=' Carbon::today()->addDays(14));

答案 1 :(得分:2)

要从明天开始两周的“选举”

// using 'Carbon'
$start_date = Carbon::now()->addDay()->format('Y-m-d');
$end_date = Carbon::now()->addDays(14)->format('Y-m-d');

public function notificationBeforeCollection() {
    return $this->activeElections()->whereBetween(
        'start_collection', [$start_date, $end_date]
    );
}