Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 条令和“仅从{{table}}中选择*”——是否可以避免没有本机查询的表继承?_Php_Sql_Postgresql_Symfony_Doctrine Orm - Fatal编程技术网

Php 条令和“仅从{{table}}中选择*”——是否可以避免没有本机查询的表继承?

Php 条令和“仅从{{table}}中选择*”——是否可以避免没有本机查询的表继承?,php,sql,postgresql,symfony,doctrine-orm,Php,Sql,Postgresql,Symfony,Doctrine Orm,我有一个实体,它使用一个名为software的表。在我正在开发的应用程序的UI中,软件中的所有条目对于表单中的列表或下拉列表中的用户都很有用。不幸的是,当从软件中选择时,数据库会自动继承另一个名为software_dynamic的表 这使得UI有大约15000个软件条目,例如,在Symfony FormBuilder中使用实体时不需要这些条目。另一个例子是这样的: $doctrine->getManager->getRepository('Software')->findAll

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

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

$doctrine->getManager->getRepository('Software')->findAll();
返回用户不想看到的所有无关条目

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

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

我无法通过条令区分软件和软件动态;它们是相同的表,但其中一个是通过CRUD手动填充的(用户希望看到的),另一个是通过仅对后端有用的API自动填充的。

您是否意外地将获取模式设置为“急切加载”?这确实会导致与你的愿望相反的结果

但是,在某些情况下,当您确实需要快速加载时:

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

这与我想要的正好相反。我不想急于加载继承的或相关的实体;我只想从父表中进行选择。意识到我描述事情的方式没有我想象的那么清晰,更新了帖子。您能否提供更多信息,说明如何配置这两个实体来帮助我或其他人帮助您解决此问题-您是否在表单中定义了任何可能触发Doctrine延迟加载行为的字段?我不确定实体的任何属性在这里是否相关,但如果我错了,请纠正我。我定义了实体的类并声明@ORM\Tablename=software,因此,条令总是从software中选择n。因此,数据库还会附加来自软件_dynamic的任何相关结果;如果查询软件,它们基本上是相同的表。如果我说@ORM\Tablename=only software,它只用于列出软件表行,但在其他方面违反了原则。很抱歉,事情不是很清楚。这个问题的术语让我有些困惑;我不完全确定如何最好地解决这个问题。我一直在浏览Doctrine的源代码,尽我所能在谷歌上搜索,但我可以说我还没有完全理解这个问题,因此询问如何解决这个问题真的很棘手!