doctrine-orm - 准则 2.7.4:获取具有特定类型的实体
问题描述
我使用这样的实体X
:
/**
* @Entity
* @Table(name="x")
*/
class X {
/**
* @Id
* @GeneratedValue
* @Column(type="smallint")
*/
private $id;
/**
* @ManyToOne(targetEntity="Y")
* @JoinColumn(name="y", referencedColumnName="id")
*/
private $myY;
}
引用的类Y
是多个子类的抽象基类。的$myY
子类的实例之间不时发生变化Y
。
/**
* @Entity
* @InheritanceType("SINGLE_TABLE")
* @DiscriminatorColumn(name="type", type="string")
* @DiscriminatorMap({"UPLOAD" = "Y1", "PROCESSED" = "Y2", "ERROR" = "Y3"})
* @Table(name="y")
*/
abstract class Y {
/**
* @Id
* @GeneratedValue
* @Column(type="smallint")
*/
protected $id;
/**
* @Column(type="datetime")
*/
protected $date;
}
/**
* @Entity
*/
class Y1 extends Y {
public function __construct() {
$this->date = new \DateTime();
}
}
现在我尝试X
从数据库中获取具有Y1
as实例的所有实例$myY
:
$sql = array();
$sql[] = 'SELECT x';
$sql[] = 'FROM my\namespace\X x';
$sql[] = 'WHERE x.myY INSTANCE OF my\namespace\Y1';
$query = $this->em->createQuery(implode(' ', $sql));
$query->setFirstResult($offset);
$query->setMaxResults($maxResults);
return new Paginator($query);
但我得到一个 QueryException,似乎无法x.myY
与INSTANCE OF
. 我该如何解决?
解决方案
稍后进行一些测试:
$sql = array();
$sql[] = 'SELECT x';
$sql[] = 'FROM my\namespace\X x JOIN x.myY y';
$sql[] = 'WHERE y INSTANCE OF my\namespace\Y1';
$query = $this->em->createQuery(implode(' ', $sql));
$query->setFirstResult($offset);
$query->setMaxResults($maxResults);
return new Paginator($query);
似乎工作。
推荐阅读
- html - HTML center a CCS 灵活布局
- c++ - 文件名字符串中的转义字符
- arduino - 运行 Thingsboard IOT 网关时出现 MQTT 问题
- c# - 如何强制不优化 ASP.NET Core 源代码
- c++ - 为什么在具有更多 I/O 操作的较大文件上重叠 I/O 会变慢?
- css - 如何使用css更改移动设备中堆叠列的顺序
- angular - 如何过滤 rxjs 数据流中的数组?
- javascript - 匹配输入数字的正则表达式在 -50 到 100000000 之间
- java - 获取上下文 SavedStateHandle Java Android
- python - nginx-ui 项目中的烧瓶配置文件在哪里?