在 Laravel 中使用 WhereBetween 进行条件查询

Mat*_*hew 0 laravel eloquent laravel-5

对于一个小的搜索块表单,我有以下控制器功能部分:

    $manifests = DB::table('carrier_manifests')
        ->join('customers', 'carrier_manifests.carrierOrigin', '=', 'customers.id')
        ->select('carrier_manifests.*', 'customers.customer_name')          
        ->where([
                    ['manifestNumber', 'LIKE', '%' . $manifest . '%'],
                    ['originTerminal','LIKE','%' . $terminal . '%'],
                    ['carrierOrigin', $direction[0], $direction[1]],
                ])
        ->whereNull('deleted_at')
        ->orderBy('dateUnloaded', 'DESC')
        ->whereBetween('dateUnloaded', [$startDate, $endDate])
        ->limit(100)
        ->get();
Run Code Online (Sandbox Code Playgroud)

它的每个部分都正常工作,除了一个部分, the whereBetween,由于工作流程的必要性,有时dateUnloaded没有为 each 填写 in 子句carrier_manifest,这意味着如果该dateUnloaded字段为空,它将被排除在搜索结果之外。

是否有关于如何包含那些缺少的结果的建议dateUnloaded

Eri*_*ker 5

您应该能够对where()空值或类似之间进行嵌套:

$manifests = DB::table('carrier_manifests')
    ->join('customers', 'carrier_manifests.carrierOrigin', '=', 'customers.id')
    ->select('carrier_manifests.*', 'customers.customer_name')          
    ->where([
                ['manifestNumber', 'LIKE', '%' . $manifest . '%'],
                ['originTerminal','LIKE','%' . $terminal . '%'],
                ['carrierOrigin', $direction[0], $direction[1]],
            ])
    ->whereNull('deleted_at')
    ->orderBy('dateUnloaded', 'DESC')
    ->where(function($query) use ($startDate, $endDate) {
        return $query->whereBetween('dateUnloaded', [$startDate, $endDate])
            ->orWhereNull('dateUnloaded');
    })
    ->limit(100)
    ->get();
Run Code Online (Sandbox Code Playgroud)