#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();