Okay, so Sensio Lab’s Symfony is great, but those repositories are a bit limiting in their design scope. I mean, how often do you need to access data through custom database queries and other cross referencing between database tables and not only use one table? Of course, you’re going to have to combine database tables in even mildly complex website but Symfony’s repositories are designed to deal with one table and one “entity” referencing that table.
One way to make sure you are accessing other repositories from an entity’s repository is to overload the parent’s constructor by calling on the parent constructor first. I actually stumbled onto this solution because I wanted to see what Symfony’s base Repository class’s constructor looked like. Look familiar? It passes in the entity manager ($em) and the repository’s class ($class).
protected $yourEntityRepo; function __construct($em, $class){ parent::__construct($em, $class); $this->yourEntityRepo=$this->getManager()->getRepository(YourBundle:YourEntity'); }
Connect as many repositories as you need to this way. Keep in mind that without the parent __construct params, you can still access the entity manager and get the repositories with $this->getManager(), this is just a convenient way to do it automatically and make other repositories available within the repository if you make those repositories class variables which would then be available in any method in the repository.