【发布时间】:2013-12-05 09:45:55
【问题描述】:
假设以下AbstractPage 模型:
/*
* @ORM\Entity
* @ORM\Table(name="page")
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="type", type="string")
* @ORM\DiscriminatorMap
* ({
* "page" = "Page",
* "link" = "Link"
* })
*/
还有以下 DQL 查询:
SELECT p FROM \Page\Model\AbstractPage
生成的 SQL 将是:
SELECT ... FROM page p0_ WHERE p0_.type IN ('page', 'link')
现在的问题是:如何从该查询中删除 WHERE 子句。在更复杂的查询中,WHERE 子句的这一部分使得无法使用某些已定义的索引。这可以通过在索引中添加type 来解决,但这会使我的索引变大,我觉得这没有必要。
AbstractPage 是继承树中的根。因此我们对表中的所有记录感兴趣。省略 WHERE 部分正是如此。
所以问题是:我怎样才能让 Doctrine 在不需要的地方删除这个 WHERE 部分。
谢谢!
【问题讨论】:
-
对于它的价值:使用 Doctrine 2.2,我没有这个 WHERE 部分,但我有一个不同之处:我没有使用 SINGLE_TABLE, JOINED。我不知道是版本还是这个设置改变了 WHERE。
-
遗憾:版本不同!
-
你使用哪个版本的学说?
标签: php sql doctrine-orm indexing dql