Grazie della risposta

Nel secondo modo però dovresti perdere lo stack trace della prima eccezione, nel senso che lanciando la CategoryModelException la DbException si perde perchè intercettata dal blocco try del metodo insert.
No, mantengo lo stack trace attraverso $e->getMessage()
anche se ritengo che fatto 30 .............

Potresti in questo caso specializzare le eccezioni (tipo CategoryModelException) overloadando il costruttore dell' eccezione in modo che gli passi come parametro anche lo stack trace.
D'accordissimo una cosa del genere:

qui

Praticamente il consiglio che volevo