2016-01-22 9 views
8

Di seguito è riportato un estratto dalla documentazione laravel:SQL tra due colonne in laravel/Lumen

Il metodo whereBetween verifica che il valore di una colonna è tra due valori:

$users = DB::table('users')->whereBetween('votes', [1, 100])->get();

Ma cosa succede se voglio scoprire se un valore è tra due colonne nel mio database?

Questo è il mio SQL prime:

SELECT a.*, b.name FROM restaurants a, restaurant_class b 
WHERE a.restaurant_class_id = b.id 
AND '$d' = CURRENT_DATE 
AND '$t' BETWEEN a.saturday_ot AND a.saturday_ct 
ORDER BY id DESC 

saturday_ot e saturday_ct sono TIME colonne mio tavolo e $t è una variabile tempo. Quindi voglio controllare se il tempo è tra le volte in entrambe le colonne.

+1

credo che si deve utilizzare il metodo whereRaw –

risposta

17

Non esiste un'alternativa al metodo whereBetween che si applica a due colonne. È tuttavia possibile farlo in due modi:

1. Usa whereRaw con attacchi, in cui si utilizza la condizione prima e un binding per la variabile:

whereRaw('? between saturday_ot and saturday_ct', [$t]) 

2. Utilizzare un where con due condizioni che utilizzano i due valori della colonna come confini per il $t valore della variabile:

where(function ($query) use ($t) { 
    $query->where('saturday_ot', '<=', $t); 
    $query->where('saturday_ct', '>=', $t); 
})