2014-09-28 8 views
8

Mam zapytanie jak tenwhereBetween Daty w laravel 4 wymowny

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') 

Teraz jak mogę przekonwertować tej kwerendy w laravel 4. Używam Eloquent

+0

Czego spróbować że nie działa? – mbouzahir

+0

@mbouzahir Aktualizuję moje pytanie. Proszę zapoznać się z pytaniem o aktualizację –

Odpowiedz

0

Można użyć whereRaw() dodać surowego gdzie klauzuli do kwerendy, na przykład:

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

Albo można użyć DB::raw() jako pierwszy argument whereBetween(), ale nie jestem pewien, czy jest to możliwe, w takim przypadku można użyć orWhere() z zamknięciem napisać więcej czytelnego kodu, na przykład:

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']); 
}); 

Ale Nie jestem do końca pewien, czy to działa, spróbuj.

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(); 

może można spróbować tego

+0

jak zbudować 'select * from calendar_schedules jako cs gdzie 1446377416 między cs.from_booking_date a cs.to_booking_date;' – 89n3ur0n

+0

Oto co to działa: '$ schedule = DB :: table ('calendar_schedules') -> whereRaw ('(między? From_booking_data' i 'to_booking_data') OR (? Między' from_booking_date' i 'to_booking_date')', [$ request-> input (" startDate "), $ request-> input (' endDate ')]) -> first(); ' – 89n3ur0n

1

w przykładzie, jesteś sprawdzanie zarówno from_date i to_date dla tego samego zakresu dat ... jeśli będzie to zawsze być przypadek, można dokonać tej kwerendy nieco bardziej "wymowny":

W SpPrice.php modelu

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

Następnie aby wywołać tę metodę z kontrolera:

$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();