当前位置: 首页 > 知识库问答 >
问题:

条令(联接)类表继承中根实体的查询字段

蒋何平
2023-03-14

我有一个名为内容的实体。这是我所有其他内容相关实体的抽象基类。

/**
* MyBundle\Entity\Content
*
* @ORM\Entity(repositoryClass="MyBundle\Repository\ContentRepository")
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="discr", type="string")
* @ORM\Table(name="MyBundle_content")
* @ORM\HasLifecycleCallbacks
*/
abstract class Content

内容属性:

  • id
  • 更新
  • ......

此外,我有许多不同的实体,它们都扩展了内容。

在我的存储库(另一个非内容且不扩展内容的实体)中,我有一个相当复杂的查询,我想在其中选择所有内容对象的“更新”字段(取决于其他一些不相关的内容)

编辑:但内容实体已通过“”连接到另一个实体上-

问题是,在这种情况下,查询原则将每个将内容扩展到内容表的实体连接起来。因为我有很多实体,所以我得到的错误是

General error: 1116 Too many tables; MySQL can only use 61 tables in a join

在我的例子中,我不需要所有这些连接的表,因为我需要的信息仅在内容表中。

有没有办法只查询根实体表,同时仍然使用queryBuilder而不编写自己的sql?

共有2个答案

田硕
2023-03-14

最后,我自己编写了整个SQL语句,因为在连接多个实体时,没有办法只连接它们的基本实体,而不是实际的继承类。

编辑:与条令的开发人员交谈,自己编写SQL语句是一条可行之路。

盖和泰
2023-03-14

是的,有:

$result = $this->em->getRepository('MyBundle:Content')
             ->createQueryBuilder('c')
             ->select('c')
             ->leftJoin('c.Other', 'p')
             ->getQuery()
             ->getArrayResult();

这将只查询根实体

 类似资料:
  • 我想知道是否可以将一个实体配置为自动从另一个实体加载数据。前任。 和 当findby、findbyone等访问accountsUsers时,是否可以设置accountsUsers以自动加载所有帐户数据。关系为accountsUsers.userid=accounts.id。 如果没有,我将如何在使用原则的连接中做到这一点。我知道如何使用纯原始sql。 选择*从帐户a左加入帐户用户ba.id=b.u

  • 我对JPA中的继承是新手。我不知道如何查询这样的内容: 让我们假设一个联接继承映射,其中a是一个具有'id'和'name'的实体。还有从A继承的实体A1和A2。A1提供字段'int1',A2提供字段'int2'

  • 我很难启动服务器,因为它抱怨在查询中找不到继承的属性。 我的问题是,既然我试图将它移动到继承模型(联接),我如何在带注释的查询中引用继承的属性? (注意,该属性是私有可见性,在BaseContent中使用public getter/setter) 谢谢。

  • 有没有办法在没有显式连接的实体上编写条件查询?通过显式连接,我的意思是数据库中的两个表没有外键关系,但一些列需要从两个表中提取,因此在查询中需要连接。我知道具有join的查询可以用‘In’子句编写,而条件查询可以用‘In’条件编写。我已经写了这种情况下的HQL,但请告诉我如何编写这种情况下的标准查询。 先谢谢了

  • 问题内容: 我有一个解决方案,我认为我可以照顾模型继承,但是现在再来看一下,它实际上并不能解决我的问题。我希望能够调用一个模型,然后让我可以访问子模型的字段。对于继承,我仍然必须将子模型名称放在命令行中,这会破坏整个目的。这是我想要的示例: 我想做的是: 并使其运行相应的渲染功能。例如,如果pk与Note模型对齐,则它将仅返回self.id。当然,这简化为我要使用这些功能执行的操作。 我不必使用模

  • 问题内容: 我有一个实体类和一个基于该实体的子类: 和 我需要发出仅在基类(A)上使用存储过程的本机查询。如果我尝试如下: 我收到有关“在ResultSet中未找到clazz_列”的错误。我假设JPA提供程序添加了此列,以便区分基类和扩展类。我可以通过显式添加clazz列和子类中的所有字段来解决此问题: 其中“ prop1”和“ prop2”是子类B的属性。但是,这似乎是不必要的修改,并且如果子类