Sebastián Grignoli
Sebastián Grignoli

Reputation: 33432

Set up non-persistent relation in Doctrine 2

I have an object $user that has a one to many relation with $establishment. I can use:

$user->getEstablishments();

The user can select a stablishment to work on. I have this method that I call in the controller:

$user->setCurrentEstablishment($establishment);

And this one that I call in the view:

$establishment = $user->getCurrentEstablishment();

I want to be able to call:

$user->setCurrentEstablishmentBy Slug($establishment_slug);

where the slug is a string, and let the user object look for the establishment.

Doctrine discourages the practice of accessing the Entity Manager inside the Entity object, but I think that using it in the controller is even worse.

I suspect that some special Doctrine annotation exists that takes care of non persistent relations like this, or some method other than serving the Entity Manager through a service should be used here. Some easy way of referencing other entities from inside the model.

¿Is there any? ¿How could I do that?

Upvotes: 1

Views: 504

Answers (1)

Paweł Mikołajczuk
Paweł Mikołajczuk

Reputation: 3812

There is no Annotation in Doctrine which could convert slug into object.

What can help You is ParamConverter, with it you can automatically convert slug from query into object. But it still must be used in Controller.

Example usage:

/**
* @Route("/some-route/{slug}")
* @ParamConverter("object", class="AppBundle:Establishment", options={"id" = "slug", "repository_method" = "findEstablishmentBySlug"})
*/
public function slugAction(Establishment $object)
{
...

Docs about param converter: http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html

Upvotes: 1

Related Questions