【发布时间】:2014-09-02 07:43:02
【问题描述】:
各位程序员:)
我的情况很糟糕,不知道发生了什么。
这涉及两个实体: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”缺少鉴别器列“discr”。对于这个查询。
但是,如果我从 DQL 查询中删除 JOIN w.files 并将其留给延迟加载,或者从 addFilterConstraint() 方法返回一个空字符串,即使它确实具有“已删除”字段,也不会发生这种情况。
那么,如果有人知道:究竟是什么原因造成的,如何解决?
提前谢谢你:)
【问题讨论】:
-
兄弟...你解决了吗?
-
我没有。必须保留 JOIN w.files 删除,因为我没有找到解决这个问题的其他方法。
-
表中的空值是我的问题
-
以下答案可能对如何解决此问题有所帮助。 discriminator-column-to-a-field-with-doctrine-2
标签: symfony inheritance filter doctrine-orm