我有一个不知道发生了什么事的坏情况。
这涉及两个实体:Ware
和File
。
在我的存储库中,我有一个函数返回File
个对象和商品以避免延迟加载:
此函数的相关部分(因为即使我仅触发此位也会发生异常)是:
public function findByWithFilesTotal($params, $page = false, $per_page = false){
$res = $this->_em->createQuery('SELECT w, f FROM ShopBundle:Ware w JOIN w.files f');
// same result occurs with LEFT JOIN
return count($res->getResult());
}
重要的东西: 1)Ware和File类是类Data的直接后代。鉴别家都没事。
2)Ware与File具有OneToMany关系 - 这意味着File表具有ware_id列。
3)这是最重要的部分(恕我直言)。我使用此过滤器来分隔所有Data
后代中的已删除项目。
class UndeletedFilter extends SQLFilter
{
public function addFilterConstraint(ClassMetadata $targetEntity, $targetTableAlias)
{
if(!$targetEntity->hasField('deleted'))
return "";
return "( $targetTableAlias.deleted = 0 OR $targetTableAlias.deleted IS NULL)";
}
}
它适用于所有其他实体,但会导致HydrationException,并使用DQL别名“f”消息“Acme \ CoreBundle \ Entity \ File”缺少“鉴别器列”"RES“。对于这一个查询。
但是,如果我从DQL查询中删除JOIN w.files
并将其保留为延迟加载,或者从addFilterConstraint()
方法返回空字符串,即使它确实已删除,也不会发生这种情况'field。
所以,如果有人知道:究竟是什么导致了这一点,以及如何解决它?
提前谢谢你:)
答案 0 :(得分:3)
在您使用固有类时触发此异常的一个原因,例如,如果您的discriminator column
具有null
值,则QueryBuilder将不知道如何根据类型转换此未知类型