Выберите с расширенными предложениями where и временной меткой, используя Carbon и DB

У меня есть код для генерации SQL-запроса из таблицы. Я хочу выбрать элементы, существующие между датами и истинным значением в другом поле.

Использование БД в строительстве и карбоновых фасадах, следуя советам о том, как работать с карбоном в laravel 5.

Но я не получаю эффекта, я возвращаю все строки

private function runBids() {
      $dt = Carbon::parse(Config::get('constants.start_lot'));
      $start = $dt->toDateTimeString();  // 2006-05-08 08:34:59
      $end   = $dt->addDay()->startOfDay(); // 2006-05-09 00:00:00

      $lots = DB::table('lots')
               ->select('id')
               ->where('end',false)
               ->where('end_auction', '<=', $end)
               ->where('end_auction', '=>', $start)  // Not work. Return 0 results
     // if comment  ->where('end_auction', '=>', $start) result 39 results with date 
     // between dates 
     // (start it's date of first element of table order by end_auction) 
               ->get();
      $lots_id = array();
      foreach ($lots as $value){
         $lots_id[] = $value->id;
      }
      dd($lots_id);
}

person abkrim    schedule 08.05.2016    source источник


Ответы (1)


Все кажется правильным, за исключением оператора, используемого для параметра $start. У вас есть

->where('end_auction', '=>', $start)

И вы должны были

->where('end_auction', '>=', $start)

Обратите внимание на разницу между => и >=. Первый выдает ошибку MySQL. Вы можете попытаться обернуть этот код вокруг блока try ... catch и проверить сообщение об исключении.

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

person Luís Cruz    schedule 08.05.2016
comment
Боже мой... часов об этом вопросе за ошибку. Большое спасибо. И еще спасибо за ваши советы по включению журнала запросов в Laravel. - person abkrim; 08.05.2016