Неправильные записи при фильтрации даты - PullRequest
0 голосов
/ 18 февраля 2020

У меня странная проблема, когда я фильтрую в связанных моделях по дате, рассмотрим этот код:

function applyDepositOnRangeFilter($query, $request)
{
    if ($request->has('deposit_at_from')) {
        $query->whereHas('deposits', function ($query) use ($request) {
            $query->whereDate('created_at', '>=', $request->input('deposit_at_from'));
        });
    }


    if ($request->has('deposit_at_to')) {
        $query->whereHas('deposits', function ($query) use ($request) {
            $query->whereDate('created_at', '<=', $request->input('deposit_at_to'));
        });
    }
}

, если я фильтрую вчерашнюю дату 17/02/20; он возвращает результаты с сегодняшней датой 18/02/20, а если я отфильтрую 16/02/20, он также возвращает 17 и 18, это происходит только во всех связанных моделях фильтрации

Ответы [ 3 ]

0 голосов
/ 18 февраля 2020

удалить знак "больше и меньше", чтобы вы могли получить конкретный c результат даты

function applyDepositOnRangeFilter($query, $request)
{
if ($request->has('deposit_at_from')) {
    $query->whereHas('deposits', function ($query) use ($request) {
        $query->whereDate('created_at', '=', $request->input('deposit_at_from'));
    });
}


if ($request->has('deposit_at_to')) {
    $query->whereHas('deposits', function ($query) use ($request) {
        $query->whereDate('created_at', '=', $request->input('deposit_at_to'));
    });
 }
}
0 голосов
/ 18 февраля 2020

Извините, ребята, но я понял, вот что мне подходит для получения диапазона:

  $query->whereHas('deposits', function ($query) use ($request) {
            $query->whereDate('created_at', '>=', $request->input('deposit_at_from')) 
            ->whereDate('created_at', '<=', $request->input('deposit_at_to'));
  })

, если вам интересно, laravel ver - 5.6,

Спасибо всем : -))

0 голосов
/ 18 февраля 2020

вы ищете диапазоны, поэтому логично, что вы получаете несколько дат. также при вводе необходимо установить обе даты для ограничения нижнего и верхнего предела диапазона. в вашей настройке вам нужно отправить и 16/02/20, и 17/02/20, чтобы получать записи для 16/02/20.

, поэтому проверьте, что оба значения доступны, если вам нужно указать конкретный c диапазон.

if ($request->has('deposit_at_from') && $request->has('deposit_at_to') {
     $query->whereHas('deposits', function ($query) use ($request) {
            $query->whereDate('created_at', '>=', $request->input('deposit_at_from'));
     $query->whereHas('deposits', function ($query) use ($request) {
            $query->whereDate('created_at', '<=', $request->input('deposit_at_to'));

} 

или просто используйте одно поле для фильтрации по дате, если вы хотите получить один результат по дате, и выполните необработанный фильтр:

$query->where(DB::raw("DATE(created_at) = '".date('Y-m-d', $request->input('deposit_date')."'"));

...