学说和';仅从{{table}}中选择*';-是否可以在没有本机查询的情况下避免表继承


Doctrine and 'select * from only {{table}}' - Is it possible to avoid table inheritance without native querying?

我有一个实体,它使用一个名为software的表。在我正在开发的应用程序的UI中,software中的所有条目对表单中的列表或下拉列表中的用户都很有用。不幸的是,当从software中进行选择时,数据库会自动继承另一个名为software_dynamic的表。

这使得UI有大约15000个软件条目,例如在Symfony FormBuilder中使用实体时不需要这些条目。另一个例子是这样的:

$doctrine->getManager->getRepository('Software')->findAll();

返回用户不希望看到的所有无关条目。

我需要做的是让Doctrine运行像select * from only software这样的查询。我曾试图通过FormBuilder中的query_builder选项来实现这一点,但我只能找到一种方法来返回我想要的结果数组——而不是像FormBuilder所需的QueryBuilder实例。

我担心的是,我在这里唯一的选择是手动查询软件,然后将其作为选项传递到表单中。这并不理想,但似乎是唯一的选择。。我只是希望有人知道如何告诉Doctrine实体不要从其他表继承,本质上是使用SQL中的only语句。

我没有办法通过学说来区分softwaresoftware_dynamic;它们是相同的表,但一个是从CRUD手动填充的(用户希望看到的表),另一个是通过API自动填充的(仅对后端有用)。

您是否意外地将获取模式设置为EAGER加载?这确实会造成与你所渴望的相反的效果。

但是,当执行时,在某些情况下需要紧急加载:

$query = $em->createQuery("SELECT e FROM MyProject'Entity e");
$query->setFetchMode("MyProject'AssociatedEntity", "field", "EAGER");
$query->execute();