学说2 - 如何在where子句中使用discriminator列

Can*_*ğan 36 php dql doctrine-orm discriminator

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

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

我有一个错误:"消息:[语义错误]第0行,第73行'format ='image'':错误:类实体\文件\ AbstractFile没有字段或关联命名格式"

我怎样才能在where子句中使用discriminator列?

谢谢.

Koc*_*Koc 60

我认为你应该使用INSTANCE OF

  • 更具体地说是$ db-> andWhere('实例\文件\图像') (13认同)
  • 如果你使用占位符(例如,''IN INSTANCE OF:type'`),你需要设置如下参数:`$ query-> setParameter('type',$ em-> getClassMetadata('Entity\File \图像'))` (4认同)
  • `$ db-> andWhere($ db-> expr() - > isInstanceOf('f',Entity\File\Image :: class));` (3认同)
  • 您还可以使用鉴别器映射的键而不是实体类名称。 (2认同)

Ais*_*tis 10

它将在查询构建器中查找如下:

$class = 'Entity\File\Image';

$qb = $this->createQueryBuilder('f');
$qb->where($qb->expr()->isInstanceOf('f', $class));
Run Code Online (Sandbox Code Playgroud)

注意:您将无法将类设置为参数,因为它将被转义.