2012-04-13 8 views
1

Propel ORM(1.6.5)を使用して、テーブル "A"をテーブル "B"にjoinWith()した後、結果PropelObjectCollectionでtoArray()を呼び出すと、各AレコードのBは、Aのすべてのレコードを再度含んでいます(以下のダンプを参照)。Propelの左結合で問題が発生するORM

AがBにLEFTて、joindは正確に一つのB.コード内にポイントの各レコードである私が使用しています:

$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 
            ... 

は私が停止したいですこれは、主に多くのレコードがあり、再帰で私は簡単に512mのmemory_limitをPHPに渡します(私はテストのために2048mさえ行ったが、まだ行きました)

答えて

0

あなた自身のフォーマッタを書くことができます結果セットで何をすべきかを決めることができます:http://www.propelorm.org/reference/model-criteria.html#using_an_alternative_formatter

$aArray = $oAQuery->setFormatter('MyCustomFormatter')->find(); 
// instead of $aArray = $oAQuery->toArray(); 
:カスタムフォーマッタを使用して

は、余分なメソッド呼び出しが必要です

関連する問題