Как фильтровать данные между двумя датами с помощью eloquent laravel?

#laravel

#laravel

Вопрос:

Я хочу фильтровать данные между двумя датами в laravel. У меня есть таблица со столбцом date, где дата хранится в формате Y-m-d.

 $total = AppModelsData::where('age_id',$age->id)
            ->where('nationality',$nationality)
            ->when(isset($to), function($q){
                $q->whereBetween('dateTime',[$from,$to]);
            })->when(!isset($to), function($q){
                $q->where('dateTime',$from);
            })
            ->sum('count'); 

Мое условие таково, что $to иногда может быть нулевым. Но для whereBetween требуются как $ from, так и $to для его работы. И где извлекаются данные из $ from и $ to, но не между $ from и $ to. Если заполнен только $from, я хочу отфильтровать данные по этой запрошенной дате. И если $from и $to заполнены, я хочу отфильтровать данные между $from и $ to и выполнить подсчет этих данных. Как я могу этого добиться?

Ответ №1:

Попробуйте это :

 $data = AppModelsData::where('age_id',$age->id)
            ->where('nationality', $nationality)
            ->when(isset($to), function($q) use($from, $to){
                $q->whereBetween('date', [$from, $to]);
            })
           ->when(!isset($to), function($q) use($from){
                $q->whereDate('date', $from);
            })
          ->get();
 

Комментарии:

1. вместо get я могу использовать sum, потому что я суммирую здесь

Ответ №2:

Eloquent поставляется с when() функцией, которая может выбирать, когда части запроса должны быть выполнены.

 $data = Data::when(isset($to), function($q){
            $q->whereBetween('date', [$from, $to]);
        })->when(!isset($to), function($q){
            $q->whereDate('date', $from);
        })->get();
 

Комментарии:

1. С этого момента я получаю неопределенную переменную $

2. Я отредактировал свою функцию, можете ли вы это увидеть

3. используйте это, если($request-> from){ $dates=$this->dateFilter($request-> from,$request-> to); $from=$dates[0]; $to=$dates[1]; }

4. где я должен это использовать

Ответ №3:

Для этого вы можете присвоить значение $to , когда оно равно нулю, например:

 if (!$to) {
    $to = now();
}

$data = Data::whereBetween('date',[$from, $to])->get();