Doctrine和'select * from only {{table}}' - 是否可以在没有本机查询的情况下避免表继承?

时间:2014-04-09 21:38:16

标签: php sql postgresql symfony doctrine-orm

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

您是否意外将获取模式设置为EAGER加载?这确实会导致你想要的相反效果。

然而,当您执行需要在某些情况下急切加载时:

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