xpdo getCollectionGraph

Mar 16, 2016

Добрый день! Есть следующая модель записей

  • session
    • SessionAnswer
      • sessionQuestionAnswer
      • sessionQuestionAnswer
      • sessionQuestionAnswer
    • SessionAnswer
      • sessionQuestionAnswer
      • sessionQuestionAnswer
      • sessionQuestionAnswer

И следующий код

$session = $modx->getObjectGraph('modtestSession','{"SessionAnswer":{"SessionQuestionAnswer":""}}',84);
$sessionAnswers = $session->getMany('SessionAnswer');
//в моем случае объекту $session соответствует ровно 10 записей SessionAnswer, выводится все правильно
echo "sessionAnswers: ".count($sessionAnswers);
foreach($sessionAnswers as $sessionAnswer){
	//А вот тут getMany возвращает только по одному объекту, хотя в среднем может быть от 1 до 6 объектов SessionQuestionAnswer на каждый SessionAnswer 
	$sessionQuestionAnswers = $sessionAnswer->getMany('SessionQuestionAnswer');
	echo "sessionQuestionAnswers: ".count($sessionQuestionAnswers);
}

Модель такая (поля выбросил, чтоб не перегружать):

<object class="modtestSession" table="modsession" extends="xPDOSimpleObject">
    <param name="wmode" value="opaque"></param>                   
    <composite alias="SessionAnswer" class="modtestSessionAnswer" local="id" foreign="session_id" cardinality="many" owner="local" />
    <aggregate alias="Topic" class="modtestTopic" local="topic_id" foreign="id" cardinality="one" owner="foreign" />
</object>

<object class="modtestSessionAnswer" table="modsessionanswer" extends="xPDOSimpleObject">
    <param name="wmode" value="opaque"></param>
    <field key="session_id" dbtype="int" phptype="integer" null="false" default=""/>
    <field key="question_id" dbtype="int" phptype="integer" null="false" default=""/>
    <aggregate alias="Session" class="modtestSession" local="session_id" foreign="id" cardinality="one" owner="foreign" />
    <aggregate alias="Question" class="modtestQuestion" local="question_id" foreign="id" cardinality="one" owner="foreign" />
    <composite alias="SessionQuestionAnswer" class="modtestSessionAnswerQuestion" local="id" foreign="session_question_id" cardinality="many" owner="local" />
</object>

<object class="modtestSessionAnswerQuestion" table="modsessionanswer_question" extends="xPDOSimpleObject">
    <param name="wmode" value="opaque"></param>
    <field key="session_question_id" dbtype="int" phptype="integer" null="false" default=""/>
    <aggregate alias="SessionAnswer" class="modtestSessionAnswer" local="session_question_id" foreign="id" cardinality="one" owner="foreign" />
</object>

На втором уровне вложенности возвращает по 1 объекту. Это нормальное поведение getObjectGraph или я что-то делаю не так? На первом уровне возвращается правильное количество, но вот на втором уже по одному объекту. Если заменить getObjectGraph на getObject, то всё нормально.