12
votes

Avoir un référentiel personnalisé non associé à une entité dans Symfony 2 / Doctrine 2?

serait possible d'avoir un référentiel personnalisé non associé à une entité dans Symfony 2 et Doctrine 2? J'aimerais y mettre cela un SQL natif qui ne convient pas à d'autres référentiels (il peut se référer à une hiérarchie abstraite ou entité).

Comment le code du contrôleur ceci-> getdoctrine () -> gettrepositoty (/ * ??? * /) doit être remplacé?


0 commentaires

3 Réponses :


1
votes

Ma suggestion est de créer une classe PHP uni avec les dépendances nécessaires dans le constructeur et de l'obtenir via le conteneur de service.


0 commentaires

15
votes

Il est possible d'avoir autant de référentiels que vous le souhaitez. Cependant, seul un seul référentiel peut être relié au gestionnaire d'entité.

Vous devez définir quelques services pour ajouter un référentiel personnalisé. P>

namespace Acme\FQCN;

use \Doctrine\DBAL\Connection;

class MiscRepository
{
    protected $conn;

    public function __construct(Connection $conn)
    {
        $this->conn = $conn;
    }
}


6 commentaires

Désolé, je voulais dire que le référentiel ne devrait être associé à aucune entité. Alors, pourquoi la chose de métadonnée?


@Gremo Dans ce cas, il serait logique de simplement créer un service supplémentaire et injecter une connexion de base de données elle-même.


Après avoir injecté de la base de données_connection, je ne devrais faire qu'une classe qui hérite de l'entitérepository, n'est-ce pas?


@Gremo Nope, puisque vous n'utilisez pas réellement aucune des fonctionnalités ORM, le référentiel n'aurait pas à hériter de entityrepository du tout.


Bien. Merci pour votre aide, je vais accepter la réponse. La seule mauvaise chose de référentiel personnalisé (avec des dépendances) est la nécessité de définir et de passer les métadonnées. Créer un service pour chaque métadonnée d'entité pourrait être assez ennuyeux.


@Gremo vient penser à cela, vous n'auriez pas à définir les métadonnées. Au lieu de cela, créez l'objet medadata dans le constructeur de votre référentiel.



6
votes

J'ai adopté une solution légèrement différente à l'aide de Symfony2 Services parents.

Tout d'abord, j'ai créé un service parent, un GenericRepository Classe qui expose quelques méthodes et rend la vie plus facile dans le cas où nous " d J'aime refacturer notre code à l'avenir.

services.yml xxx

acme \ Bundle \ Référentiel \ genericRepository xxx

Nous voulons maintenant définir un nouveau référentiel:

services.yml < / p> xxx

acme \ bundle \ producteur \ producteur \ producteurbatcher xxx

xxx

xxx

xxx

xxx

() Méthode crée et exécute la requête suivante:

Supprimer de produit_batch dans laquelle ID =?

enfin dans notre contrôleur: > xxx

pour plus d'informations et Manager d'entité / Connexion Utilisation Veuillez vous reporter à la documentation officielle: http://doctrine-orm.readthedocs.org/fr/latest/reference/native-sql.html


0 commentaires