2014-09-28 19 views
8

Ho una domanda del generewhereBetween date in laravel 4 eloquente

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

Ora come posso convertire questo query in laravel 4. Io uso Eloquent

+0

Cosa hai provato che non ha funzionato? – mbouzahir

+0

@mbouzahir Aggiorna la mia domanda. Vedere la domanda di aggiornamento –

risposta

0

È possibile utilizzare whereRaw() per aggiungere un grezzo in cui la clausola alla query, ad esempio:

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

O forse è possibile utilizzare DB::raw() come primo argomento di whereBetween(), ma non sono sicuro se è possibile, in questo caso è possibile utilizzare orWhere() con una chiusura a dare una codice più leggibile, ad esempio:

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

Ma Non sono abbastanza sicuro che se funziona, provalo.

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

forse si può provare questo

+0

come posso creare questo 'select * da calendar_schedules come cs dove 1446377416 tra cs.from_booking_date e cs.to_booking_date;' – 89n3ur0n

+0

Ecco cosa funziona: '$ schedule = DB :: table ('calendar_schedules') -> whereRaw ('(tra 'from_booking_date' e' to_booking_date') OR (? Tra 'from_booking_date' e' to_booking_date')', [$ request-> input ('startDate'), $ request-> input (' endDate ')]) -> first(); ' – 89n3ur0n

1

Nel tuo esempio, si sta controllando sia from_date e to_date per lo stesso intervallo di date ... se questo sarà sempre il caso, si può fare questa query un po 'più "eloquenti":

Nel modello SpPrice.php:

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

Poi, chiamare questo metodo da un controllore:

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