7
votes

Comment obtenir un alias de table doctrine2?

Je veux créer une méthode dans ma classe de référentiel Doctrine2 qui prend un queryBuilder et ajoute des clauses supplémentaires, dont une jointure interne.

Comment puis-je découvrir l'alias de table utilisée pour instancier la QueryBuilder? Est-ce quelque chose que quelque chose de découvertable ou devrait-il être une convention sur le codebase (et donc une source potentielle de bogues)? P>

Mon code client est le suivant: P>

public function userCanReadRestriction(\Doctrine\ORM\QueryBuilder $builder, \TenK\UserBundle\Entity\User $user)
{
                             // where can I get 'p' from?
    return $builder->innerJoin('p.shares', 's')
        ->where('createdBy = :creator')
        ->orWhere('s.toUser = :toId')
        ->setParameters(array('creator' => $user, 'toUser' => $user));
}


0 commentaires

3 Réponses :


-1
votes

Vous pouvez revenir sur la partie de la partie de votre QueryBuilder en appelant le getdqlpart ('Select') méthode.

Plus d'informations ici .

Ensuite, cherchez comment la doctrine doit analyser une partie de sélection ici .

Vous pouvez probablement faire la même chose à savoir si la table associée à votre référentiel est appelée et quel est son alias.


2 commentaires

Hmm ... semble un peu hacky. Y a-t-il une autre façon de faire cela? Comment les gens suivent-ils les objets QueryBuilder dans leur code?


J'ai déballé cette réponse. Je connais son vieux, mais ça ne cause pas. Pourquoi j'ai fait cela: Tout d'abord, il s'agit d'une réponse basée sur un lien, et dit réellement "aller quelque part et comprendre des choses vous-même", deuxième de tous, les liens dirigent vers la branche principale du référentiel, cela signifie que le code du référentiel doit changer la ligne. le pointeur sera incorrect (ce qui est réellement arrivé déjà)



3
votes

J'ai réussi à obtenir un alias avec xxx

(où $ Builder est une instance de doctrine \ orm \ querybuilder)


0 commentaires

10
votes

L'objet QueryBuilder a deux méthodes pertinentes: - getrooTaliases () - getrootentities ()

appeler getrooTaliases sur un QueryBuilder qui a le jeu de clause code> de code> retournera un tableau de tous les alias; De même, appeler des gistrootentities retournera un tableau des noms de classe abrégés des entités sélectionnées. P>

$qb = $em->createQueryBuilder();
$qb->from('BundleName:EntityName', 'entityName');

var_dump($qb->getRootAliases()); // returns ['entityName']


0 commentaires