Without much information only a vague answer can be proposed, so here is my try:
I suppose you use one or more controllers or other concept of entry points for user requests. This is where I'd ultimately see error handling: In the code layer that is at the edge of the application and the "gateway" to the user. If it's a single controller, you can obviously add try/catch around calls to your business logic. If it's multiple controllers, you will need to add the try/catch to all of them which could be quite cumbersome, so maybe it makes sense to have one piece of code where all requests pass. A benefit of this approach is that this is not limited to Doctrine but maybe you also might want to handle other errors in such a way.
If you use the Symfony framework, such an exception handler is quite easy, as they do exactly this: Use common infrastructure code (named HttpKernel) where all requests are handled, and have an exception handling mechanism for all exceptions that bubble up to this infrastructure code. If you don't want to use Symfony, a look at the source code (https://github.com/symfony/symfony) or the docs (https://symfony.com/doc/current/index.html) might still be useful for inspiration.
If you catch only specific exception types or everything (\Exception or even \Throwable) is of course up to you. I personally would like to avoid having library dependencies bleed too much into my code base so would wrap them in custom exceptions.