#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',
]);
Что-то не так с кодом?