php Propel:toArray()方法填充的指纹数量超出预期

时间:2014-10-13 04:40:54

标签: php schema propel

我有一个相当简单的查询:     TableAQuery ::创建() - > leftJoinWith('表B') - >发现() - >指定者()

问题是TableB会抛出tableA中所有元组的foriegn引用,这些元组对tableB具有相同的引用。

即假装tableA中的5个元组的前4个引用tableB中的相同元组,结果是tableB中的每个元组也将相同的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>

在更大的查询中,结果是大量的指数增长,这会减慢整个系统的速度。如何在不删除模式中的外键引用的情况下避免TableB中的TableA引用?

1 个答案:

答案 0 :(得分:0)

尝试添加->setFormatter('Propel\Runtime\Formatter\OnDemandFormatter')

->find()

之前

然后将->toArray()放入循环

这只会根据需要加载每个对象,而不是一次加载