質問

私はこのようなどこの節の弁別列を使った:

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

エラーがあります。>

WHERE句の識別列を使用する方法は?

ありがとう。

役に立ちましたか?

解決

のインスタンス

他のヒント

このようなクエリビルダーを調べます。

$class = 'Entity\File\Image';

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

:エスケープされるため、クラスをパラメータとして設定できないことがわかりません。

PHP 5.50以上の場合:
$this->createQueryBuilder('f')
        ->andWhere('f INSTANCE OF '.Image::class)
.

この最新のDoctrineバージョンとして、それはQueryの照会値を照会するためにサポートされています。

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

この句に結果クエリを作成します。

WHERE e0_.discr IN ('discriminator_passed_to_function')
.

この場合は、その場合はINSTANCE OFにアクセスする必要がありませんので、このDoctrine拡張は私にとって非常に便利でした。

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

次のような次のクラス構造があります。

ベースクラス

class1 baseclass から継承します(識別子= C1)

class2 class1 から継承します(識別子= C2)

class3 class1 (識別子= c3)から継承

class1 からすべてのエンティティを選択したいが、 class2 または class3 からではありません。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top