原则 2 - 如何在 where 子句中使用鉴别器列
-
13-11-2019 - |
题
我在 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';
不隶属于 StackOverflow