学说中根实体的查询字段(合并)class table 继承
Query field of root entity in doctrine (joined) class table inheritance
我有一个名为 Content 的实体。
这是我所有其他内容相关实体的抽象基础 class。
/**
* 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
- 已更新
- .....
此外,我有很多不同的实体都扩展了内容。
在我的存储库中(另一个非内容且未扩展内容的实体)我有一个相当复杂的查询,我想 select "updated" 所有内容对象的字段(取决于其他一些不相关的东西)
编辑:
但是内容实体在该查询中通过“->leftJoin('p.content', 'c')”连接到另一个实体。
我的意思是我在一个完全不同的实体的存储库中,它只与内容有关,这就是为什么我用 '->leftJoin('p.content', 'c')'(其中 p 是我当前所在的存储库中的实体。
问题是,在该查询原则中,连接了将内容扩展到内容 table 的每个实体。
因为我有很多实体,所以我得到的错误是
General error: 1116 Too many tables; MySQL can only use 61 tables in a join
在我的例子中,我不需要所有这些连接的 table,因为我需要的信息仅在内容 table 中。
有什么方法可以只查询根实体 table,同时仍然使用查询构建器而不是自己编写 sql?
是的,有:
$result = $this->em->getRepository('MyBundle:Content')
->createQueryBuilder('c')
->select('c')
->leftJoin('c.Other', 'p')
->getQuery()
->getArrayResult();
这将只查询根实体
最后我自己写了整个 SQL 语句,因为在加入多个实体时没有办法只加入它们的基础实体,而不是实际继承 class.
编辑:与学说的开发者交谈,自己编写 SQL 语句是可行的方法。
我有一个名为 Content 的实体。 这是我所有其他内容相关实体的抽象基础 class。
/**
* 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
- 已更新
- .....
此外,我有很多不同的实体都扩展了内容。
在我的存储库中(另一个非内容且未扩展内容的实体)我有一个相当复杂的查询,我想 select "updated" 所有内容对象的字段(取决于其他一些不相关的东西)
编辑: 但是内容实体在该查询中通过“->leftJoin('p.content', 'c')”连接到另一个实体。 我的意思是我在一个完全不同的实体的存储库中,它只与内容有关,这就是为什么我用 '->leftJoin('p.content', 'c')'(其中 p 是我当前所在的存储库中的实体。
问题是,在该查询原则中,连接了将内容扩展到内容 table 的每个实体。 因为我有很多实体,所以我得到的错误是
General error: 1116 Too many tables; MySQL can only use 61 tables in a join
在我的例子中,我不需要所有这些连接的 table,因为我需要的信息仅在内容 table 中。
有什么方法可以只查询根实体 table,同时仍然使用查询构建器而不是自己编写 sql?
是的,有:
$result = $this->em->getRepository('MyBundle:Content')
->createQueryBuilder('c')
->select('c')
->leftJoin('c.Other', 'p')
->getQuery()
->getArrayResult();
这将只查询根实体
最后我自己写了整个 SQL 语句,因为在加入多个实体时没有办法只加入它们的基础实体,而不是实际继承 class.
编辑:与学说的开发者交谈,自己编写 SQL 语句是可行的方法。