我有一个相当简单的查询: 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引用?
答案 0 :(得分:0)
尝试添加->setFormatter('Propel\Runtime\Formatter\OnDemandFormatter')
在->find()
然后将->toArray()
放入循环
这只会根据需要加载每个对象,而不是一次加载