Propel ORM (1.6.5) では、テーブル「A」をテーブル「B」に joinWith() し、後で結果の PropelObjectCollection で toArray() を呼び出すと、各 A レコードの B のエントリに A のすべてのレコードが含まれます。もう一度 (以下のダンプを参照)。
A は B に LEFT JOINd です。A の各レコードは B の 1 つを指しています。私が使用しているコード:
$oAQuery = AQuery::create()
->joinB('b', Criteria::LEFT_JOIN)
->useBQuery()
->_if(strlen($sB))
->filterByBField1(str_replace(' ', '%', $sCity))
->_endif()
->endUse()
->with('b');
$oCollection = $oAQuery->find();
$aArray = $oAQuery->toArray();
toArray() ダンプ:
Array
(
[0] => Array
(
[Field1] => 29
[Field2] => 0
[B] => Array
(
[BField1] => 7
[BField2] => 10
[As] => Array
(
[A_0] => *RECURSION*
[A_1] => Array
(
[Field1] = 234
[Field2] = 3424
...
主に、多くのレコードがあり、再帰を使用すると、PHPの512mのmemory_limitを簡単に超えてしまうため、これを止めたいです(テストで2048mを実行しましたが、それでも超えました)