Doctrine uses proxy objects to represent related objects in order to facilitate lazy loading. This is a really cool feature, but its causing an issue with something I am trying
Doctrines lazy loading is very good at its job, and will replace a proxy object with a real one as soon as you try to use it or any of its properties. If you are having issues due to the proxy objects (like I did in my question) you most probably have an error in your model.
That said, you can tell doctrine to pull all the related data by telling it to "hydrate":
$query->getResult(Doctrine\ORM\Query::HYDRATE_ARRAY);