我在 where 子句中使用了鉴别器列,如下所示:

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

我有一个错误:“信息:[语义错误] 第 0 行,第 73 栏,靠近“format = 'image”:错误:类 Entities\File\AbstractFile 没有名为 format 的字段或关联”

如何在 where 子句中使用鉴别器列?

谢谢。

有帮助吗?

解决方案

我认为你应该使用 的实例

其他提示

它将查看像这样的查询生成器:

$class = 'Entity\File\Image';

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

note :您将无法将类设置为参数,因为它将被转义。

对于PHP 5.50及以上:

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

作为这种最新的文章版本,支持直接查询鉴别器值。

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 在这种情况下不起作用。

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

例如:我有以下类结构:

基类

1级 继承自 基类 (鉴别器 = c1)

2级 继承自 1级 (鉴别器 = c2)

3级 继承自 1级 (鉴别器 = c3)

我想从中选择所有实体 1级 但不是来自 2级 或者 3级

SELECT c FROM \Class1 c WHERE TYPE(c) = 'c1';
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top