Не знаю актуально ли, но провозившись с похожей проблемой некоторое время, нашел такое решение:
- Берем начальный экземпляр запроса
$query = DB::select('users')->where('age', '>=', '16');
- Возвращаем по условию результаты запроса с различными where, и конечно же участвует начальный where (хотя он не обязателен)
if (a > b)
return $query->where('name', 'John')->get();
elseif (b > a)
return $query->where('lastname', 'Winners')->get();