2014-10-21 2 views
0

У меня есть мой запрос, отлично работающий в mySQL, однако я изо всех сил стараюсь использовать передовые wheres внутри larvel query builder.Laravel 4 advanced wheres

Может ли кто-нибудь помочь в преобразовании этого вообще?

До сих пор у меня есть:

Laravel

$start_request = '2014-12-18 09:00'; 
$end_request = '2014-12-18 10:00'; 

$events= DB::table('events') 
      ->where('hotel_id', 4) 
      ->orWhere(function($query) 
       { 
        $query->where($start_request, '<=', 'start_time') 
           ->where($end_request, '>', 'start_time'); 
       }) 
      ->orWhere(function($query) 
       { 
        $query->where($start_request, '>=', 'start_time') 
           ->where($end_request, '<', 'end_time'); 
       }) 
      ->get(); 

MySql

SELECT id, title, description, start_time, end_time FROM events where hotel_id = 4 and (('2014-12-18 09:00' <= start_time and '2014-12-18 10:00' > start_time) 
     or ('2014-12-18 09:00' >= start_time and '2014-12-18 10:00' < end_time)); 

ответ

1

Можете ли вы попробовать это?

$start_request = '2014-12-18 09:00'; 
$end_request = '2014-12-18 10:00'; 

$events= DB::table('events') 
      ->where('hotel_id', 4) 
      ->where(function($query) use($start_request, $end_request) { 
        $query->where(function($subquery) use($start_request, $end_request){ 
         $subquery->where('start_time', '>=', $start_request) 
           ->where('start_time', '<', $end_request); 
        }); 
        $query->orWhere(function($subquery1) use($start_request, $end_request) { 
         $subquery1->where('start_time', '<=', $start_request) 
           ->where('end_time', '>', $end_request); 
        }); 

      }) 
      ->get(); 
+0

Я получаю 'Undefined переменной: start_request' – user3189734

+0

Хорошо, это нормально, я обновил свой ответ. Извините, но я не могу проверить это в данный момент на моем env. –

+0

Работал отлично. Большое вам спасибо за вашу помощь. Это очень ценится. – user3189734

1

Что-то, как это должно сделать работу:

$start_request = '2014-12-18 09:00'; 
$end_request = '2014-12-18 10:00'; 

$events = DB::table('events') 
    ->where('hotel_id', 4) 
    ->where(function ($q) use ($start_request, $end_request) { 
     $q->where(function ($query) use ($start_request, $end_request) { 
      $query->where($start_request, '<=', 'start_time') 
       ->where($end_request, '>', 'start_time'); 
     }) 
     ->orWhere(function ($query) use ($start_request, $end_request) { 
      $query->where($start_request, '>=', 'start_time') 
       ->where($end_request, '<', 'end_time'); 
     }); 
    }) 
    ->select('id', 'title', 'description', 'start_time', 'end_time') 
    ->get(); 
+0

Спасибо, Марцин, ваша адаптация наиболее полезна – user3189734

Смежные вопросы