【问题标题】:whereBetween eloquent query returns empty outputwhereBetween 雄辩的查询返回空输出
【发布时间】:2016-08-16 07:47:49
【问题描述】:

我正在尝试使用带有两个给定开始和结束日期的 'whereBetween' eloqouent 查询。

$first_day_this_month = date('Y-m-01 H:s:i'); //get the first day of the current month
$yesterDay = date('Y-m-d H:s:i',strtotime("-1 days")); //get yesterday's date

$d = m_chat_history::where('employee_id',$request->other_id)
                ->whereNull('to_group')->where('to_employee_id',$request->id)
                ->whereBetween('created_at',[$yesterDay,$first_day_this_month])
                ->get();

我通过“var_dump”确保我拥有查询所需的所有数据,它确实为我提供了查询所需的所有数据,但查询返回一个空输出。有什么想法、线索、建议、帮助、建议吗?我试图删除“whereBetween”,我的查询就像它返回预期的输出一样工作,但使用“whereBetween”,返回输出为空。

【问题讨论】:

  • mysql日期时间格式为:date('Y-m-01 H:i:s');你写的是 'H:s:i' 而不是 'H:i:s'
  • 不要说“不工作”,要说“没有输出”。差异可能看起来很小,但第二个措辞表明没有语法错误,这可能是一个巨大的问题。
  • @Sovon 试过 'H:i:s' 但还是一样。
  • 您昨天的日期可能比每月的第一天大。一开始应该是较小的:whereBetween('created_at',[$first_day_this_month, $yesterDay])
  • @CodeDemon:如果你删除了whereBetween条件,你会得到并记录吗?

标签: php mysql laravel laravel-5 eloquent


【解决方案1】:

在定义whereBetween 的值时,请确保使用与created_at 相同的类型和格式。当您使用日期时间时,您可以定义边缘值,例如(只是其中一种方法):

$first_day_this_month = date('Y-m-01 H:i:s');
$yesterday = date('Y-m-d H:i:s', strtotime("-1 day"));

还要确保参数的顺序(仍然请考虑像每月第一天这样的边缘情况,$yesterday 会更小,所以你必须添加一些逻辑并小心):

->whereBetween('created_at', [$first_day_this_month, $yesterday])

编辑:不是时间戳...

【讨论】:

  • “created_at”列类型为“timestamp”
  • 尝试了您的答案,但似乎无法正常工作,但输出仍为空。
  • 您是否也更改了值之间的顺序?这很重要。
  • 嗯……你确定有这段时间的数据吗?
  • 是的,我确定,我的数据库中有记录。
【解决方案2】:

试试这个, 但首先你必须用 composer 安装Carbon

做完之后

use Carbon

然后编写闲置代码

$yesterday = Carbon::yesterday()->toDateTimeString();
$carbon = new Carbon('first day of ' . date('F Y'));
$first_day = $carbon->toDateTimeString();

在您的查询中

->whereBetween('created_at', [$first_day, $yesterday])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 2015-12-17
    • 2021-09-15
    • 2021-01-12
    • 2015-07-07
    • 2018-01-26
    相关资源
    最近更新 更多