Doctrine provider speedup

Had to do this for a project, it makes sense for everyone to have access to this.

Note: I have to fix up the `protected abstract` order before merging.