Domanda

Sono stato usato la colonna discriminatrice in cui la clausola come questa:

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

Ho un errore: "Messaggio: [Errore semantico] Linea 0, Col 73 Vicino 'format=' Image '' Image '' Errore: Entità di classe \ File \ AbstractFile non ha alcun campo o associazione denominata formato" Come posso utilizzare la colonna Discriminator in cui la clausola?

Grazie.

È stato utile?

Soluzione

Penso che dovresti usare istanza di

Altri suggerimenti

Guarderebbe in Query Builder come questo:

$class = 'Entity\File\Image';

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

Nota : che non sarai in grado di impostare la classe come parametro perché verrà sfuggito.

per PHP 5.50 e sopra:

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

Come questa ultima versione di dottrina è supportato per interrogare direttamente il valore discriminatore.

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

Avrà una query dei risultati con questa clausola:

WHERE e0_.discr IN ('discriminator_passed_to_function')
.

Questa estensione di dottrina è stata molto utile per me perché avevo bisogno di accedere alla categoria madre e INSTANCE OF non funziona in tal caso.

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

Ad esempio: ho la seguente struttura di classe:

Baseclass

Class1 Eredita da BaseClass (Discriminator= C1)

class2 eredita da class1 (discriminator= c2)

class3 eredita da class1 (discriminator= c3)

Voglio selezionare tutte le entità da Class1 ma non da Class2 o Class3

SELECT c FROM \Class1 c WHERE TYPE(c) = 'c1';
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top