【问题标题】:whereBetween with dates not workingwhereBetween 日期不起作用
【发布时间】:2018-11-08 02:06:38
【问题描述】:

我正在尝试根据 Laravel 中的年龄进行搜索查询。但是,当我尝试在两个日期之间进行查询时,我没有得到任何结果。我的代码如下:

    $today = Carbon::today();
    $age_from = $today->subYears($request->age_from)->toDateString();
    $age_to = $today->subYears($request->age_to)->toDateString();

    $users->whereBetween('birthday', [$age_from, $age_to]);

    //Get matching users.   
    $users = $users->Paginate(self::paginate);

当我使用 mySql() 查看时,查询看起来正确,但由于某种原因,我没有得到任何结果。可能是语法错误? toDateString的错误使用和MySQL的日期比较?

编辑: $age_from 的输出是:

Carbon @959558400 {#245 ▼
date: 2000-05-29 00:00:00.0 UTC (+00:00)
}

$age_to 的输出是:

Carbon @-302745600 {#245 ▼
date: 1960-05-29 00:00:00.0 UTC (+00:00)
}

【问题讨论】:

  • 不是 100% 确定,但我认为您不需要这样做 toDateString。 laravel querybuilder 接受碳日期
  • 你能发布var_dump($age_from)var_dump($age_to)的输出吗?
  • 刚刚尝试删除它,但我仍然没有得到任何结果。
  • @Djave,我已经用输出更新了我的问题。
  • 较早的日期必须在前。

标签: php mysql laravel


【解决方案1】:

原因是您对$today 对象进行了两次变异。如果您检查,$age_from 在第 3 行之后与 $age_to 具有相同的值。

你应该写:

$today = Carbon::today();
$age_from = $today->copy()->subYears($request->age_from);
$age_to = $today->copy()->subYears($request->age_to);

或者干脆

$age_from = Carbon::today()->subYears($request->age_from);
$age_to = Carbon::today()->subYears($request->age_to);

【讨论】:

  • 我已经用你的代码更新了我的代码,但遗憾的是没有结果。
  • 然后检查你是否真的从你的查询中得到了结果,$users->whereBetween('birthday', [$age_from, $age_to]);,我假设你正在使用查询生成器,所以它必须是$users->whereBetween('birthday', [$age_from, $age_to])->get();
  • 我尝试过使用和不使用 toDateString()。当我删除整个 whereBetween 子句时,我确实得到了结果。我不明白为什么我没有使用 whereBetween()。
  • 尝试运行 dd($users->whereBetween('birthday', [$age_from, $age_to])->get()); 让 laravel 死掉并输出这条语句的结果。和以前在同一行。
  • 当然也要确保对我在这篇文章中写的 Carbon 进行更改 :-)
【解决方案2】:

感谢所有人,尤其是 @skovmand 和 @Jonas Staudenmeir 帮助我;我通过促进@skovmand 的代码解决了这个问题,更重要的是(和我这边的愚蠢),应该交换日期,所以不是[$age_from,$age_to],而是[$age_to,$age_from],作为$ age_to 明显是开始日期。但是谢谢,伙计们! ^_^

【讨论】:

  • 啊。所以这是两件不同的事情。很高兴听到你修复了它。
猜你喜欢
  • 1970-01-01
  • 2022-07-06
  • 1970-01-01
  • 2018-09-09
  • 2020-12-11
  • 2021-12-19
  • 2016-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多