11

I have this query, made using Laravel query builder:

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

That corresponds to: "SELECT * from elements WHERE type=1"

Now, in some cases I need to add a second Where to create a query like this:

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

Using classic php I'd do something like:

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

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

How can I do that using Laravel Query Builder?

Thank you.

The Alpha
  • 143,660
  • 29
  • 287
  • 307
Cuttlefish
  • 187
  • 1
  • 3
  • 10

2 Answers2

36

You may try something like this

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

Also, check this answer.

Community
  • 1
  • 1
The Alpha
  • 143,660
  • 29
  • 287
  • 307
0
$userId = Auth::id();
$data['user_list'] =DB::table('users')->
select('name')->
where('id','!=',$userId)->
where('is_admin','!=','1')->
get();

like that you use multiple where clause :)

Roopendra
  • 7,674
  • 16
  • 65
  • 92
robert
  • 1
  • 2
  • 1
    Welcome to Stack Overflow! Thank you for this code snippet, which may provide some immediate help. A proper explanation [would greatly improve](//meta.stackexchange.com/q/114762) its educational value by showing *why* this is a good solution to the problem, and would make it more useful to future readers with similar, but not identical, questions. Please [edit] your answer to add explanation, and give an indication of what limitations and assumptions apply. – Toby Speight Jul 03 '17 at 10:47