Фильтровать данные с использованием нескольких условий where в Eloquent Laravel

#php #laravel #eloquent #laravel-8

#php #ларавель #красноречивый #laravel-8

Вопрос:

Я использую несколько where условий и orWhere условий для фильтрации данных. Кроме того, я использую whereBetween для установки диапазона дат. В качестве фильтров, которые я отправляю от и до дат, используется массивный список фильтров. Но когда я проверяю с помощью других фильтров, я получаю все данные, которые не входят в диапазон дат. Вот образец данных фильтра.

 'from_date' => date("Y-m-d"),
'to_date' => date("Y-m-d"),
'filters' => ['', "pending","won","cancel"]  
 

вот мой код

 $this->model
    ->leftJoin('vehicle_details', 'vehicle_details.id', '=', 'vehicles.vehi_details_id')
    ->leftJoin('makes', 'makes.model_id', '=', 'vehicle_details.model_id')
    ->when(($attbutes->from_date || $attbutes->to_date), function ($q) use ($attbutes) {
        return $q->whereBetween('vehicles.auc_date', [$attbutes->from_date, $attbutes->to_date]);
    })
    ->when(($attbutes->filters amp;amp; isset($attbutes->filters[0])), function ($q) use ($attbutes) {
        if (strtolower($attbutes->filters[0]) == "pending") {
            return $q->whereNull('vehicles.vehi_details_id');
        } elseif (strtolower($attbutes->filters[0]) == "1" || strtolower($attbutes->filters[0]) == "0") {
            return $q->whereRaw('LOWER(`vehicles`.`won_status`)= ?', intval($attbutes->filters[0]));
        } else {
            return $q->whereRaw('LOWER(`vehicle_details`.`status`)= ?', strtolower($attbutes->filters[0]));
        }
    })
    ->when(($attbutes->filters), function ($q) use ($attbutes) {
        foreach ($attbutes->filters as $index => $filter) {
            if ($index > 0) {
                if (isset($filter[$index]) amp;amp; strtolower($attbutes->filters[$index]) == "pending") {
                    $q->orWhereNull('vehicles.vehi_details_id');
                } elseif (isset($filter[$index]) amp;amp; (strtolower($attbutes->filters[$index]) == "1" || strtolower($attbutes->filters[$index]) == "0")) {
                    $q->orWhereRaw('LOWER(`vehicles`.`won_status`)= ?', intval($attbutes->filters[$index]));
                } else {
                    $q->orWhereRaw('LOWER(`vehicle_details`.`status`)= ?', strtolower($attbutes->filters[$index]));
                }
            }
        }

    })
    ->get([
        'vehicles.*',
        'vehicle_details.color as vehi_color',
        'vehicle_details.grade as vehi_grade',
        'makes.model_name',
    ]);
 

Что-то не так с кодом?