Laravel whereDate()在尝试获取两个日期之间的记录时无法正常工作

时间:2017-05-23 05:59:50

标签: laravel laravel-5 laravel-5.3 laravel-5.4

我使用以下查询来获取两个日期之间的记录。我在From Date,2017-05-30的To Date中输入了2017-05-01。我运行查询并获得空结果。但是,这个DB表有本月的许多记录。我在运行它之后删除了日期查询,它获得了很多记录。什么是我的问题..

    $getdatewiseresults = Companyledger::whereDate('transaction_date', '<=' , $data['frmdate_submit'])
    ->whereDate('transaction_date', '>=', $data['todate_submit'])
    ->WhereIn('frm_ledger', $ledgerlist)
    ->where('company_id' ,$companyids)
    ->get();

2 个答案:

答案 0 :(得分:0)

试试这个:

$getdatewiseresults = Companyledger::WhereIn('frm_ledger',$ledgerlist)->where('company_id',$companyids);
if(!empty($data['todate_submit'])) {
    $getdatewiseresults = $getdatewiseresultsget->whereBetween('transaction_date', [$data['frmdate_submit'], $data['todate_submit']]);
} else {
    $getdatewiseresults = $getdatewiseresultsget->whereDate('transaction_date', '=', $data['frmdate_submit']);
}

$getdatewiseresults = $getdatewiseresults->get();

答案 1 :(得分:0)

您的日期检查错误,您正在做与您想要的相反的事情。还可以使用碳来解析日期,这样您就不必担心日期格式。请检查以下代码。

$fromDate = $data['frmdate_submit'];
$toDate = $data['todate_submit'];

$getdatewiseresults = Companyledger::where('company_id', $companyids)
    ->whereIn('frm_ledger', $ledgerlist)
    ->where('transaction_date', '>=' , \Carbon\Carbon::parse($fromDate))
    ->where('transaction_date', '<=', \Carbon\Carbon::parse($toDate))
    ->get();

同样来自您要求仅在给出时应用日期的评论。只有在提供日期条件时才使用它来应用日期条件。

$getdatewiseresults = Companyledger::where('company_id', $companyids)
    ->whereIn('frm_ledger', $ledgerlist)
    ->when($fromDate, function ($query) use ($fromDate) {
        return $query->where('transaction_date', '>=' , \Carbon\Carbon::parse($fromDate));
    })
    ->when($toDate, function ($query) use ($toDate) {
        return $query->where('transaction_date', '<=' , \Carbon\Carbon::parse($toDate));
    })
    ->get();