如何在Laravel Carbon中使用动态间隔,以便仅从mysql中选择未来10天的日期

问题描述 投票:0回答:1

我需要从一列中获取问题答案本身为(date)加上几天的数据库结果。我已经尝试了很多使用Carbon和mysql INTERVAL的方法,但是我在语法上陷入了困境。

我正在使用Laravel 6和Carbon。

我有一个名为“ questions”的表,从那里我想获得在某个日期回答的问题的ID,加上我在另一列“ repeat”中所拥有的天数。

类似这样的东西:

->where( 'answered_at', '<', Carbon::now()->subDays('repeat'))

但是,我不能只写“ repeat”,因为它不能将其识别为表格。如果我在那儿写一个数字,它实际上可以工作。

此作品:

->where( 'answered_at', '<', Carbon::now()->subDays(10))

但是由于要添加到日期的动态天数来自数据库,因此我必须将其作为动态字段。我试图在查询之前获取它,并将其用作$ variable,但这会创建两个不同的mysql查询,这将意味着性能不佳。

所以我希望这可以正常工作,但是我无法弄清楚语法:

->where( 'answered_at', '<', Carbon::now()->subDays('COLUMN_REPEAT_FROM_DB'))

我也尝试过这个:

->whereRaw("DATE_ADD(answered_at, INTERVAL 10 DAY) <= NOW()")

这有效,但随后对INTERVAL 10 DAY进行了硬编码和

->whereRaw("DATE_ADD(answered_at, INTERVAL 'repeat' DAY) <= NOW()")

也不起作用..语法!

整个查询看起来像这样:

$question = \DB::table('questions')
     ->where( 'answered_at', '<', Carbon::now()->subDays('repeat'))
     ->value('answered_at');

((我得到的是Answer_at作为值,只是为了查看要测试哪个日期,稍后将更改为id并传递给另一个函数)。

高度赞赏任何指针!

laravel date intervals
1个回答
0
投票

您上一次查询的方式正确,但使用了错误的引号。

您应该改用反引号,以指定列名:

$query->whereRaw("DATE_ADD(answered_at, INTERVAL `repeat` DAY) <= NOW()")

或者,您可以以相同的结果使用此查询:

$query->whereRaw("DATEDIFF(NOW(), answered_at) >= `repeat`")
© www.soinside.com 2019 - 2024. All rights reserved.