2014-09-28 5 views
8

У меня есть запрос, как этотwhereBetween Даты в Laravel 4 красноречивым

SELECT * FROM `sp_price` WHERE (`from_date` between '2014-08-15' and '2014-09-18') || (`to_date` between '2014-08-15' and '2014-09-18') 

Теперь, как я могу преобразовать этот запрос в laravel 4. Я использую Eloquent

+0

Что вы попробуете это не работает? – mbouzahir

+0

@mbouzahir Я обновляю свой вопрос. Пожалуйста, ознакомьтесь с вопросом об обновлении –

ответ

0

Вы можете использовать whereRaw() добавить сырым, где положение в запросе, например:

$results = SpPrice::whereRaw("('2014-08-15' between `from_date` and `to_date`) || ('2014-09-18' between `from_date` and `to_date`)")->get(); 

Или, может быть, вы можете использовать DB::raw() в качестве первого аргумента whereBetween(), но я не уверен, что если это возможно, в этом случае вы можете использовать orWhere() с крышкой, чтобы написать более читаемого кода, например:

SpPrice::whereBetween(DB::raw('"2014-08-15"'), ['from-date', 'to_date'])->orWhere(function($q) 
{ 
    $q->whereBetween(DB::raw('"2014-09-18"'), ['from-date', 'to_date']); 
}); 

Но Я не совсем уверен, работает ли это, попробуйте.

12
DB::table(sp_price) 
    ->whereBetween('from_date',array('2014-08-15','2014-08-18')) 
    ->orWhereBetween('to_date',array('2014-08-15','2014-08-15')) 
    ->get(); 

может быть, вы можете попробовать это

+0

, как я могу построить этот 'select * from calendar_schedules как cs, где 1446377416 между cs.from_booking_date и cs.to_booking_date;' – 89n3ur0n

+0

Вот что это работает: '$ schedule = DB :: table ('calendar_schedules') -> whereRaw ('между' from_booking_date' и 'to_booking_date') ИЛИ (? Между' from_booking_date' и 'to_booking_date') ', [$ request-> input (' startDate '), $ request-> input (' endDate ')]) -> first(); ' – 89n3ur0n

1

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

В модели SpPrice.php:

public function getPriceByDate($fromDate, $toDate) 
{ 
    $range = [$fromDate, $toDate]; 
    return $this 
     ->whereBetween('from_date', $range) 
     ->orwhereBetween('to_date', $range) 
     ->get(); 
} 

Тогда, вызвать этот метод из контроллера:

$prices = new SpPrice; 
    $price = $prices->getPriceByDate('2014-08-15', '2014-09-18'); 
1
$count = TokenLog::whereBetween(DB::raw('date(created_at)'), [$start_date, $end_date])->get(); 
Смежные вопросы