Если вы зацикливаете условия OR, вам не нужен второй $ query->, где из других сообщений (на самом деле я не думаю, что вам нужно вообще, вы можете просто использовать orWhere в вложенном месте если проще)
$attributes = ['first'=>'a','second'=>'b'];
$query->where(function ($query) use ($attributes)
{
foreach ($attributes as $key=>value)
{
//you can use orWhere the first time, dosn't need to be ->where
$query->orWhere($key,$value);
}
});