Question

J'ai été utilisé une colonne de discriminatrice dans où la clause comme ceci:

//f = root entity
$qb = $this->createQueryBuilder('f');
$qb->add('where', 'f.format = \'image\' OR f.format = \'text\'');

J'ai une erreur: "Message: [Erreur sémantique] Ligne 0, Col 73 Near 'Format =' Image '': Erreur: Entités de classe File AbstractFile n'a pas de champ ou d'association nommé format"

Comment puis-je utiliser la colonne Discriminator dans la clause où?

Merci.

Était-ce utile?

La solution

Je pense que tu devrais utiliser EXEMPLE DE

Autres conseils

Il ressemblerait à Query Builder comme ceci:

$class = 'Entity\File\Image';

$qb = $this->createQueryBuilder('f');
$qb->where($qb->expr()->isInstanceOf('f', $class));

Noter: que vous ne pourrez pas définir la classe en tant que paramètre car il sera échappé.

pour PHP 5,50 et plus:

$this->createQueryBuilder('f')
        ->andWhere('f INSTANCE OF '.Image::class)

En tant que dernière version de doctrine, il est pris en charge pour interroger directement la valeur du discriminateur.

public function findOfType($discr)
    {
        $qb = $this->createQueryBuilder('e');
        $qb->where('e INSTANCE OF :discr');
        $qb->setParameter('discr', $discr);
        return $qb->getQuery()->getResult();
    }

aura une requête en résultats avec cette clause:

WHERE e0_.discr IN ('discriminator_passed_to_function')

Cette extension de doctrine m'a été très utile car je devais accéder à la classe parent et INSTANCE OF ne fonctionne pas dans ce cas.

https://gist.github.com/jasonhofer/8420677

Par exemple: j'ai la structure de classe suivante:

Classe de base

Classe 1 hériter de Classe de base (discriminateur = C1)

Classe2 hériter de Classe 1 (discriminateur = C2)

Classe3 hériter de Classe 1 (discriminateur = C3)

Je veux sélectionner toutes les entités parmi Classe 1 mais pas de Classe2 ou Classe3

SELECT c FROM \Class1 c WHERE TYPE(c) = 'c1';
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top