使用Doctrine查询表时缺少行(Symfony2)

时间:2014-12-04 15:30:28

标签: php oracle symfony doctrine

我遇到了与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()后都会消失?

2 个答案:

答案 0 :(得分:0)

这就是我要做的事情:

  1. 使用createQuerycreateNativeQuery
  2. 检查结果
  3. 从symfony
  4. 之外的简单php脚本运行查询

    如果使用所有3种方法得到相同的问题,那么数据限制的大小可能会出现问题。 我将从php.ini

    中的max_execution_timememory_limit设置开始

    我还发现了一些可能设置的oracle限制: php.ini中的oci8.statement_cache_size或Oracle目录中的oraaccess.xml文件。如果您使用APC进行查询缓存,这也很重要。

    无论如何app_dev.php说什么?

答案 1 :(得分:0)

好的,我发现了导致我的问题的原因。我的实体声明中的主要ID是错误的。

oracle表有一个组合主键,而在我的实体中,ID只在一列上。 GetResult在这个专栏上做了一个DISTINCT。