schema — php Propel: метод toArray () заполняет слишком много объектов, экспоненциально больше, чем предполагалось

У меня довольно простой запрос:
TableAQuery :: Create () -> leftJoinWith ( ‘TableB’) -> Поиск () -> ToArray ()

Проблема заключается в том, что TableB возвращает обратную ссылку для всех кортежей в tableA, которые имеют одинаковую ссылку на tableB.

то есть притворяться, что первые 4 из 5 кортежей в таблице A ссылаются на один и тот же кортеж в таблице B, в результате каждый кортеж в таблице B также содержит те же 4 ссылки обратно на tableA:

TableA_Array: Array[5]
0:Object
id: 0
tableB_id: 4
TableB:Object
id: 4
TableAs: Object
TableA_0: "*RECURSION*"TableA_1: Object
TableA_2: Object
TableA_3: Object
1:Object
id: 1
tableB_id: 4
TableB:Object
id: 4
TableAs: Object
TableA_0: Object
TableA_1: "*RECURSION*"TableA_2: Object
TableA_3: Object
2:Object
id: 2
tableB_id: 4
TableB:Object
id: 4
TableAs: Object
TableA_0: Object
TableA_1: Object
TableA_2: "*RECURSION*"TableA_3: Object
3:Object
id: 3
tableB_id: 4
TableB:Object
id: 4
TableAs: Object
TableA_0: Object
TableA_1: Object
TableA_2: Object
TableA_3: "*RECURSION*"4:Object
id: 4
tableB_id: 77
TableB:Object
id: 77
TableAs: Object
TableA_0: "*RECURSION*"

Вот схема, если вам интересно:

<table name="tablea" phpName="TableA">
<column name="id" type="integer" reqiured="true" primaryKey="true" />
<column name="tableB_id" type="integer" reqiured="true"/>
<foreign-key foreignTable="tableb">
<reference local="tableB_id" foreign="id" />
</foreign-key>
</table>

<table name="tableb" phpName="TableB">
<column name="id" type="integer" reqiured="true" primaryKey="true" />
</table>

В больших запросах результатом является огромный экспоненциальный рост, который замедляет всю систему. Как можно избежать ссылок на TableA из TableB, не удаляя ссылку на внешний ключ в схеме?

1

Решение

Попробуйте добавить ->setFormatter('Propel\Runtime\Formatter\OnDemandFormatter')

как раз перед ->find()

а затем место ->toArray() внутри вашей петли

Это будет загружать каждый объект только по мере необходимости, а не все сразу

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]