筛选日期时记录错误

Wrong records when filtering date

我在按日期筛选相关模型时遇到奇怪的问题, 考虑这段代码:

function applyDepositOnRangeFilter($query, $request)
{
    if ($request->has('deposit_at_from')) {
        $query->whereHas('deposits', function ($query) use ($request) {
            $query->whereDate('created_at', '>=', $request->input('deposit_at_from'));
        });
    }


    if ($request->has('deposit_at_to')) {
        $query->whereHas('deposits', function ($query) use ($request) {
            $query->whereDate('created_at', '<=', $request->input('deposit_at_to'));
        });
    }
}

如果我过滤昨天日期 17/02/20;它 returns 结果也是今天 18/02/20 如果我过滤 16/02/20 它也 returns 17 和 18, 它只发生在所有相关模型过滤中

您正在搜索范围,因此您得到多个日期是合乎逻辑的。同样在输入时,您需要将两个日期都设置为限制范围的下限和上限。在您的设置中,您需要同时发送 16/02/20 和 17/02/20 以接收 16/02/20 的记录。

因此,如果您需要获得特定范围,请检查这两个值是否可用。

if ($request->has('deposit_at_from') && $request->has('deposit_at_to') {
     $query->whereHas('deposits', function ($query) use ($request) {
            $query->whereDate('created_at', '>=', $request->input('deposit_at_from'));
     $query->whereHas('deposits', function ($query) use ($request) {
            $query->whereDate('created_at', '<=', $request->input('deposit_at_to'));

} 

或者只使用一个字段进行日期过滤,如果您想要单个日期结果并进行原始过滤:

$query->where(DB::raw("DATE(created_at) = '".date('Y-m-d', $request->input('deposit_date')."'"));

删除大于号和小于号,以便您可以获得特定日期的结果

function applyDepositOnRangeFilter($query, $request)
{
if ($request->has('deposit_at_from')) {
    $query->whereHas('deposits', function ($query) use ($request) {
        $query->whereDate('created_at', '=', $request->input('deposit_at_from'));
    });
}


if ($request->has('deposit_at_to')) {
    $query->whereHas('deposits', function ($query) use ($request) {
        $query->whereDate('created_at', '=', $request->input('deposit_at_to'));
    });
 }
}

抱歉,伙计们,但我想通了,这对我来说很有效:

  $query->whereHas('deposits', function ($query) use ($request) {
            $query->whereDate('created_at', '>=', $request->input('deposit_at_from')) 
            ->whereDate('created_at', '<=', $request->input('deposit_at_to'));
  })

如果您想知道 laravel 版本是 5.6,

谢谢大家:-))