2013-11-24 20 views
8

mam tej kwerendy, wykonane przy użyciu konstruktora laravel zapytanie:Laravel: jak dodać klauzulę where za pomocą konstruktora zapytań?

$rows = DB::table('elements')->where('type', 1); 

To odpowiada: "select * from elementów GDZIE type = 1"

Teraz, w niektórych przypadkach trzeba dodać drugi Gdzie utworzyć kwerendę tak:

SELECT * from elements WHERE type=1 AND lang='EN' 

Korzystanie klasyczny php zrobiłbym coś takiego:

$sql = 'SELECT * from elements WHERE type=1'; 

if($var==true) $sql .= " AND lang='EN'"; 

Jak mogę to zrobić za pomocą Laravel Query Builder?

Dziękuję.

Odpowiedz

22

Możesz spróbować coś takiego

$query = DB::table('elements'); 
$query->where('some_field', 'some_value'); 

// Conditionally add another where 
if($type) $query->where('type', 1); 

// Conditionally add another where 
if($lang) $query->where('lang', 'EN'); 

$rows = $query->get(); 

także sprawdzić this answer.

+0

Mogą również być przykuty: '$ query-> where ('some_field', 'some_value') -> gdzie ('typ', 1) ; ' –

+4

@ManuelPedrera, Tak, ale aby dodać' where' warunkowo, nie można łańcucha, ponieważ 'OP' ma zamiar sprawdzić warunek przed (s) dodaje inną klauzulę gdzie. –

+1

Rcv dziękuję, twoje rozwiązanie jest tym, czego szukałem! – Cuttlefish

0
$userId = Auth::id(); 
$data['user_list'] =DB::table('users')-> 
select('name')-> 
where('id','!=',$userId)-> 
where('is_admin','!=','1')-> 
get(); 

tak użyć wielokrotnego gdzie klauzula :)

+0

Witamy w Stack Overflow! Dziękujemy za ten fragment kodu, który może zapewnić natychmiastową pomoc. Właściwe wyjaśnienie [znacznie się poprawi] (// meta.stackexchange.com/q/114762) jego wartość edukacyjna poprzez pokazanie * dlaczego * jest to dobre rozwiązanie problemu i sprawiłoby, że byłoby ono bardziej użyteczne dla przyszłych czytelników z podobnymi, ale nie identyczne, pytania. Proszę [edytuj] swoją odpowiedź, aby dodać wyjaśnienie i podać, jakie ograniczenia i założenia mają zastosowanie. –

Powiązane problemy