我遇到了与Doctrine的奇怪问题。
我需要查询一个只有1个内部联接的简单表,我已经做了很多次。但在这种情况下奇怪的是:缺少很多行。
我有一个名为Policy的实体。它链接到我的Oracle数据库上的表。此表中有81k +行。使用Doctrine查询构建器查询此实体时,我只获得5k结果。我使这个查询尽可能简单地进行测试:
$qb = $em->createQueryBuilder();
$qb->select('p')->from('ErwMonitoringExtranetBundle:Policy', 'p');
$query = $qb->getQuery();
$policiesFull = $query->getResult();
$ policiesFull变量只包含5k个元素。表中没有重复项。
Doctrine生成的SQL查询如下所示:
SELECT
r0_.node_group_name AS NODE_GROUP_NAME0,
r0_.policy_name AS POLICY_NAME1,
r0_.policy_description AS POLICY_DESCRIPTION2,
r0_.policy_group_name AS POLICY_GROUP_NAME3,
r0_.policy_type_name AS POLICY_TYPE_NAME4,
r0_.policy_name_on_agent AS POLICY_NAME_ON_AGENT5,
r0_.date_last_maj AS DATE_LAST_MAJ6,
r0_.om_name AS OM_NAME7,
r0_.id_node AS ID_NODE8
FROM
ewintranet.ref_monitored_ci;
在Oracle上运行完全相同的查询将返回完整的表内容。
通过学说查询计算结果会返回正确的行数:
$qb = $em->createQueryBuilder();
$qb->select('count(p)')->from('ErwMonitoringExtranetBundle:Policy', 'p');
$query = $qb->getQuery();
echo $query->getSingleScalarResult();
返回81k。
有没有人知道为什么所有这些行在使用getResult()后都会消失?
答案 0 :(得分:0)
这就是我要做的事情:
createQuery
或createNativeQuery
如果使用所有3种方法得到相同的问题,那么数据限制的大小可能会出现问题。 我将从php.ini
中的max_execution_time
和memory_limit
设置开始
我还发现了一些可能设置的oracle限制: php.ini中的oci8.statement_cache_size或Oracle目录中的oraaccess.xml文件。如果您使用APC进行查询缓存,这也很重要。
无论如何app_dev.php说什么?
答案 1 :(得分:0)
好的,我发现了导致我的问题的原因。我的实体声明中的主要ID是错误的。
oracle表有一个组合主键,而在我的实体中,ID只在一列上。 GetResult在这个专栏上做了一个DISTINCT。