PHP Symfony: Accessing repositories from inside a repository

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.

About Author:

Senior Cloud Software Engineer and 25+ years experienced video production, video editing and 3D animation services for a variety of global clients including local video production here in Jacksonville, Florida.

Leave a Comment

Your email address will not be published. Required fields are marked *