Хотите получить результат между временным диапазоном в Ларавеле - PullRequest
0 голосов
/ 03 июня 2018

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

$other_hour_trade = DB::table('finaltrade')
        ->join('exchanges', 'finaltrade.exchange_id', '=', 'exchanges.id')
        ->select('finaltrade.*')
        ->where('finaltrade.user_id', $user_id)
        ->whereNotBetween('finaltrade.created_at', [DB::raw('exchanges.start_time'), DB::raw("ADDTIME(exchanges.start_time, '01:00:00')")])
        ->whereNotBetween('finaltrade.created_at', [DB::raw('exchanges.close_time'), DB::raw("SUBTIME(exchanges.close_time, '01:00:00')")])
        ->get();

'finaltrade.created_at' isполе datetime, а 'exchanges.start_time' и 'exchanges.close_time' - единственное поле времени

Я объединил две таблицы, чтобы получить результаты

1 Ответ

0 голосов
/ 03 июня 2018

Я не знаю, как заставить это работать напрямую, используя whereNotBetween, но, поскольку вы уже пытаетесь прибегнуть к некоторому необработанному SQL в текущем коде, почему бы просто не использовать whereRaw вместо этого:

$other_hour_trade = DB::table('finaltrade')
    ->join('exchanges', 'finaltrade.exchange_id', '=', 'exchanges.id')
    ->select('finaltrade.*')
    ->where('finaltrade.user_id', $user_id)
    ->whereRaw("finaltrade.created_at NOT BETWEEN exchanges.start_time AND ADDTIME(exchanges.start_time, '01:00:00')")
    ->whereRaw("finaltrade.created_at NOT BETWEEN exchanges.close_time AND SUBTIME(exchanges.close_time, '01:00:00')")
    ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...