Laravel Eloquent search dois campos opcionais

Estou tentando pesquisar duas tabelas opcionais usando o eloquent:

$users = User::where('ProfileType', '=', 2) ->where(function($query) { $query->where('BandName', 'LIKE', "%$artist%"); $query->or_where('Genre', 'LIKE', "%$genre%"); })->get(); 

Isso funciona bem para retornar todos os resultados quando um usuário faz uma pesquisa vazia, mas não tenho certeza de como ajustar isso para procurar o nome da banda quando isso estiver presente e vice-versa.

Apenas para explicar o que acontece na resposta abaixo:

Eloquent faz uma coisa complicada aqui: quando você chama User::where(...) retorna um object Database \ Query . Isto é basicamente o mesmo que DB::table('users')->where(...) , um object encadernável para a construção de consultas SQL.

Então tendo:

 // Instantiates a Query object $query = User::where('ProfileType', '=', '2'); $query->where(function($query) { // Adds a clause to the query if ($artist = Input::get('artist')) { $query->where_nested('BandName', 'LIKE', "%$artist%", 'OR'); } // And another if ($genre = Input::get('genre')) { $query->where_nested('Genre', 'LIKE', "%$genre%", 'OR'); } }); // Executes the query and fetches it's results $users = $query->get(); 

Com base na resposta de Vinicius, aqui está o que funcionou:

 // Instantiates a Query object $query = User::where('ProfileType', '=', '2'); // Adds a clause to the query if ($artist = Input::get('artist')) { $query->where('BandName', 'LIKE', "%$artist%"); // Temp Usernamesearch $query->or_where('NickName', 'LIKE', "%$artist%"); } // Genre - switch function if artist is not empty if ($genre = Input::get('genre')) { $func = ($artist) ? 'or_where' : 'where'; $query->$func('Genre', 'LIKE', "%$genre%"); } // Executes the query and fetches it's results $users = $query->get(); 

Acontece que o segundo campo opcional deve usar ou, se apenas se $ artista não estiver configurado.

Obrigado pela ajuda

Eu acho que isso é o que você está procurando. Sua visão teria um formulário para pesquisar artista / gênero, um ou outro pode ser configurado, ou ambos, ou nenhum.

 $users = User::where('ProfileType', '=', 2); if (Input::has('artist')) { $users = $users->where('BandName', 'LIKE', '%'.Input::get('artist').'%'); } if (Input::has('genre')) { $users = $users->where('Genre', 'LIKE', '%'.Input::get('genre').'%'); } $users = $users->get();