【问题标题】:DB where between two date columns两个日期列之间的数据库
【发布时间】:2014-12-09 13:38:36
【问题描述】:

我想在 Laravel 42 中检索两个日期列之间的记录。

Model::where('created_at', '<=', 'created_at' + 5 days)->get();

我有一个created_at 专栏。我需要检索created_atcreated_at + 5 天之间的所有记录。

我使用这种方法添加天数date('Y-m-d H:i:s', strtotime(date('Y-m-d H:i:s') . '+5 days'));,这很有效。但我不能让它做我想做的事。

至少有可能吗?如果是,我该怎么做?

提前致谢!

【问题讨论】:

  • 这有什么意义?它返回所有的行,所以改写问题。
  • 我需要检索created_at(created_at + 5 days) 日期列之间的所有记录。
  • 不,你没有。说你想要实现的,而不是你想从数据库中得到的,因为显然不是这个。
  • @jarek - 不想粗鲁,但他清楚地说出了他想要达到的目标。他需要在条件之间从数据库中提取行,这意味着从创建行的日期到仅 5 天。某种提取最近不超过 5 天的结果
  • @aspirinemaga 你并不粗鲁,只是不要阅读这个问题。除非 OP 想要比较另一列,而这在任何地方都没有提到,或者这个查询没有任何意义:where created_at between created_at and created_at + interval 5 days

标签: mysql date laravel


【解决方案1】:

如果您想执行原始 SQL,那么您需要 DB::raw()

但是,根据我是否正确理解您的问题,以下可能对您有用:

$now = \Carbon\Carbon::now();
$inFiveDays = \Carbon\Carbon::now()->addDays(5);
Model::where('created_at', '>', $now)->where('created_at', '<=', $inFiveDays)->get();

使用DB::raw() 并使用原始 SQL:

Model::whereRaw('created_at BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 5 DAY');

反正就是这样。

【讨论】:

  • 这不是我真正想要的。使用您的代码,我检索 NOW 和 NOW+5 天之间的所有记录。我需要的是检索 CREATED_AT 和 CREATED_AT+5 天之间的所有记录。非常不同的东西。不过还是谢谢!
  • 您是否尝试将 'now()' 更改为您的 created_a?
  • @Alexxali 是的,我认为我没有正确阅读您的问题 - 问题是您所说的对我来说毫无意义:“CREATED_ATCREATED_AT 之间的所有记录+5 天”——这是什么意思? CREATED_AT 是什么?如果它是表中的一个字段(因此每行都不同),那么当它每行不同时,如何获得介于它和其他内容之间的所有内容?这就是我在这里真正感到困惑的地方。通常,一个查询会告诉我所有的东西,其中每件事的变化是不变的,但你想要的是变化的东西也是变化的。
  • 您在答案中的查询,假设CREATED_AT 是数据库中的日期列,基本上是说让我在 CREATED_AT 列小于其现有值 + 5 天的情况下获取所有内容,这将显然得到你的一切。有点像if (4 &lt; 7) { /* code */ } - 这是多余的。但我真的不知道你到底想要什么。
【解决方案2】:

我还没有找到用 SQL 做的任何方法,所以我找到了这个解决方案:

$posts      = Posts::all();

foreach ( $posts as $key => $post )
    if ( strtotime($post->created_at . '+5 days') < time() )
        unset( $posts[$key] );

我在这里所做的是遍历整个对象数组。一旦我发现一条不符合我的时间限制的记录,我就从数组中删除它。

【讨论】:

  • 所以改写你的问题。对此的查询将是:where created_at &gt;= now() - interval 5 day
猜你喜欢
  • 2013-10-19
  • 2015-07-10
  • 1970-01-01
  • 1970-01-01
  • 2012-05-01
  • 2011-11-25
  • 2020-11-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多