Отсутствие строк при запросе таблицы с помощью Doctrine (Symfony2)

Я встречаю странную проблему с Доктриной.

Мне нужно запросить простую таблицу с одним внутренним соединением, которое я уже делал много раз. Но в этом случае что-то странно: пропущено много строк.

У меня есть объект под названием «Политика». Он связан с таблицей в моей базе данных Oracle. В этой таблице содержится 81k + строк. Когда вы запрашиваете этот объект с помощью конструктора запросов Doctrine, я получаю только 5k результатов. Я сделал этот запрос максимально простым для тестирования:

$qb = $em->createQueryBuilder(); $qb->select('p')->from('ErwMonitoringExtranetBundle:Policy', 'p'); $query = $qb->getQuery(); $policiesFull = $query->getResult(); 

Переменная $ policyFull содержит только 5k элементов. В таблице нет дубликатов.

SQL-запрос, созданный Doctrine, выглядит следующим образом:

 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 ()?

Related of "Отсутствие строк при запросе таблицы с помощью Doctrine (Symfony2)"

Это то, что я сделал бы:

  1. Проверьте результат с помощью createQuery или createNativeQuery
  2. Запустите запрос из простого скрипта php за пределами symfony

Если со всеми тремя методами вы получите ту же проблему, это может быть проблемой с ограничением данных. Я бы начал с параметров max_execution_time и memory_limit в php.ini

Я также нашел некоторые ограничения на оракулы, которые могут быть установлены на: oci8.statement_cache_size в php.ini или в файле oraaccess.xml в каталоге Oracle. Это также важно, если вы используете APC для кеширования запросов.

В любом случае, что говорит app_dev.php?

Хорошо, я узнал, что вызвало мою проблему. Первичный идентификатор был неправильным в моей декларации Entity.

В таблице oracle был составлен первичный ключ, тогда как в моей сущности идентификатор был только на одном столбце. GetResult делал DISTINCT в этом столбце.