我有一个使用单表继承的现有应用程序:
/**
* @Entity
* @Table(name="entities")
* @InheritanceType("SINGLE_TABLE")
* @DiscriminatorColumn(name="class", type="string")
* @DiscriminatorMap({
* "channel" = "Channel",
* "aggregator" = "Aggregator"
* })
* @HasLifecycleCallbacks
*/
通过 DQL 搜索实体:
$dql = 'SELECT a FROM VolkszaehlerModelEntity a
获取 channel
类型的所有实体,aggregator
很好,这就是生成的 SQL:
SELECT e0_.id AS id0, e0_.uuid AS uuid1, e0_.type AS type2, e0_.class AS class6,
FROM entities e0_
WHERE e0_.class IN ('channel', 'aggregator')
当我尝试通过扩展鉴别器映射来扩展继承时
* @DiscriminatorMap({
* "channel" = "Channel",
* "aggregator" = "Aggregator",
* "generic" = "GenericEntity"
* })
找不到新的generic
类型,因为SQL保持不变 - 将查询限制为channel
和aggregator
。
如果有任何关于控制 SQl 生成SINGLE_TABLE继承的提示,我将不胜感激。
事实证明,问题出在缓存上。上面给出的实现是正确的,但元数据没有刷新(这很令人困惑,因为我可以创建新的实体类型,但找不到它):
$config->setMetadataCacheImpl($cache);
// rebuild cache!
$cache->deleteAll();