Si por ejemplo necesitamos filtrar por un campo en el caso de que tengamos el valor de ese campo, podemos usar el método when de la siguiente forma:
Laravel 5 o superior
$agenda = \App\Show::with(
'colles',
'city',
'results.results.castellType'
)
->whereYear('date', $current_year)
->whereMonth('date', $month_search)
->when($current_colla_id > 0, function ($query) use ($current_colla_id) {
$query->where('colla_id', $current_colla_id);
})
->orderBy('date', 'desc')
->get();
En el ejemplo podemos observar que en el caso de que la variable current_colla_id sea mayor que 0, se añadirá a la consulta el filtro (where colla_id).
Laravel 4.2
$emails = Email::where(function($query) {
if(!Input::has('alldates'))
$query->whereBetween('created_at', [Input::get('from'), Input::get('to')]);
if(!Input::has('allorigins'))
$query->where('categoria', Input::get('categoria'));
if(Input::has('noexported'))
$query->where('exportat', 0);
})
->get();

