Comment obtenir un respository d'une entité?
J'ai une Entité appelée Game
avec un Référentiel correspondant appelé GameRepository
:
/**
* @ORM\Entity(repositoryClass="...\GameRepository")
* @ORM\HasLifecycleCallbacks()
*/
class Game {
/**
* @ORM\prePersist
*/
public function setSlugValue() {
$this->slug = $repo->createUniqueSlugForGame();
}
}
Dans le prePersist méthode, je dois m'assurer que le Jeu slug domaine est unique, ce qui nécessite une requête de base de données. Pour faire la requête, j'ai besoin d'accéder à la EntityManager
. Je peux obtenir l'EntityManager de l'intérieur GameRepository. Donc: comment puis-je obtenir le GameRespository partir d'un Jeu?
source d'informationauteur Amy B
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas. Les entités dans la Doctrine 2 sont censés pas savoir de l'entité gestionnaire ou le référentiel.
Une solution typique pour le cas où vous présentons serait l'ajout d'une méthode pour le dépôt (ou une classe de service) qui est utilisé pour créer (ou appelé à stocker) de nouvelles instances, et produit une unique valeur de slug.
Vous fait peut obtenir le référentiel au sein de votre entité et qu'au cours d'un cycle de vie de rappel. Vous êtes très proche, tout ce que vous avez à faire est de recevoir le
LifecycleEventArgs
paramètre.Voir aussi http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html
PS. Je sais que c'est une vieille question, mais j'ai répondu à aider tous les futurs googlers.
vous pouvez injecter de la doctrine de l'entité gestionnaire de votre entité
(à l'aide de JMSDiExtraBundle)
et ont le référentiel comme ceci:
voir ceci : http://jmsyst.com/bundles/JMSDiExtraBundle/1.1/annotations
Afin de garder la logique encapsulé sans avoir à changer la façon dont vous économiser de l'entité, au lieu de la simple prePersist cycle de vie de l'événement, vous aurez besoin de regarder à l'aide de la plus puissante Doctrine des événements qui peuvent avoir accès à plus que juste de l'entité elle-même.
Vous devriez probablement regarder le DoctrineSluggableBundle ou StofDoctrineExtensionsBundle faisceaux qui pourrait faire tout ce dont vous avez besoin.