No foreign key definition for parentClass: CitizenReport using relation alias: AnimalsInvolved.report_number=CitizenReport.report_number
<?xml version="1.0" encoding="UTF-8"?>
<model package="citizenreports" baseClass="xPDOObject" platform="mysql" defaultEngine="MyISAM" tablePrefix="ifac_" version="1.1">
<object class="CitizenReport" table="citizen_reports" extends="xPDOSimpleObject">
<field key="id" dbtype="int" precision="11" phptype="integer" null="false" index="pk" default=""/>
<field key="report_number" dbtype="varchar" precision="6" phptype="string" null="false" default=""/>
<field key="name" dbtype="varchar" precision="255" phptype="string" null="false" default=""/>
<field key="phone" dbtype="varchar" precision="14" phptype="string" null="false" default=""/>
<field key="address" dbtype="varchar" precision="255" phptype="string" null="false" default=""/>
<field key="email" dbtype="varchar" precision="255" phptype="string" null="false" default=""/>
<field key="careprovider_name" dbtype="varchar" precision="255" phptype="string" null="false" default="" />
<field key="farm_name" dbtype="varchar" precision="255" phptype="string" null="false" default="" />
<field key="careprovider_phone" dbtype="varchar" precision="14" phptype="string" null="false" default="" />
<field key="careprovider_address" dbtype="varchar" precision="255" phptype="string" null="false" default="" />
<field key="createdon" dbtype="datetime" phptype="datetime" null="true"/>
<field key="createdby" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" default="0" />
<field key="editedon" dbtype="datetime" phptype="datetime" null="true"/>
<field key="editedby" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" default="0" />
<index alias="PRIMARY" name="PRIMARY" primary="true" unique="true">
<column key="id" length="11" collation="A" null="false" />
</index>
<aggregate alias="CreatedBy" class="modUser" local="createdby" foreign="id" cardinality="one" owner="foreign" />
<aggregate alias="EditedBy" class="modUser" local="editedby" foreign="id" cardinality="one" owner="foreign" />
<aggregate alias="AnimalsInvolved" class="AnimalsInvolved" local="report_number" foreign="report_number" cardinality="one" owner="local" />
</object>
<object class="AnimalsInvolved" table="animals_involved" extends="xPDOSimpleObject">
<field key="report_number" dbtype="varchar" precision="6" phptype="string" null="false" default=""/>
<field key="animal_type" dbtype="varchar" precision="255" phptype="string" null="false" default=""/>
<aggregate alias="CitizenReport" class="CitizenReport" local="report_number" foreign="report_number" cardinality="one" owner="foreign" />
</object>
</model>
$sql = $modx->newQuery('CitizenReport');
$sql->select('CitizenReport.*');
$sql->leftJoin('AnimalsInvolved', 'AnimalsInvolved.report_number=CitizenReport.report_number');
$sql->select('AnimalsInvolved.report_number AS report_number');
$sql->sortby($sort, $dir);
$citizenreports = $modx->getCollection('CitizenReport',$sql);
error_log( print_r($citizenreports, true) );
<object class="CitizenReport" table="citizen_reports" extends="xPDOSimpleObject">
<field key="id" dbtype="int" precision="11" phptype="integer" null="false" index="pk" default=""/> <object class="CitizenReport" table="citizen_reports" extends="xPDOObject">
<field key="id" dbtype="int" precision="11" phptype="integer" null="false" index="pk" generated="native"/>
<?xml version="1.0" encoding="UTF-8"?>
<model package="citizenreports" baseClass="xPDOObject" platform="mysql" defaultEngine="MyISAM" tablePrefix="ifac_" version="1.1">
<object class="CitizenReport" table="citizen_reports" extends="xPDOObject">
<field key="id" dbtype="int" precision="11" phptype="integer" null="false" index="pk" generated="native"/>
<field key="report_number" dbtype="varchar" precision="6" phptype="string" null="false" default=""/>
<field key="name" dbtype="varchar" precision="255" phptype="string" null="false" default=""/>
<field key="phone" dbtype="varchar" precision="14" phptype="string" null="false" default=""/>
<field key="address" dbtype="varchar" precision="255" phptype="string" null="false" default=""/>
<field key="email" dbtype="varchar" precision="255" phptype="string" null="false" default=""/>
<field key="careprovider_name" dbtype="varchar" precision="255" phptype="string" null="false" default="" />
<field key="farm_name" dbtype="varchar" precision="255" phptype="string" null="false" default="" />
<field key="careprovider_phone" dbtype="varchar" precision="14" phptype="string" null="false" default="" />
<field key="careprovider_address" dbtype="varchar" precision="255" phptype="string" null="false" default="" />
<field key="createdon" dbtype="datetime" phptype="datetime" null="true"/>
<field key="createdby" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" default="0" />
<field key="editedon" dbtype="datetime" phptype="datetime" null="true"/>
<field key="editedby" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" default="0" />
<aggregate alias="CreatedBy" class="modUser" local="createdby" foreign="id" cardinality="one" owner="foreign" />
<aggregate alias="EditedBy" class="modUser" local="editedby" foreign="id" cardinality="one" owner="foreign" />
<composite alias="AnimalsInvolved" class="AnimalsInvolved" local="report_number" foreign="report_number" cardinality="many" owner="local" />
</object>
<object class="AnimalsInvolved" table="animals_involved" extends="xPDOSimpleObject">
<field key="report_number" dbtype="varchar" precision="6" phptype="string" null="false" default=""/>
<field key="animal_type" dbtype="varchar" precision="255" phptype="string" null="false" default=""/>
<aggregate alias="CitizenReport" class="CitizenReport" local="report_number" foreign="report_number" cardinality="one" owner="foreign" />
</object>
</model>
$sql = $modx->newQuery('CitizenReport');
$sql->leftJoin('AnimalsInvolved', 'AnimalsInvolved');
$sql->select(array('CitizenReport.*','AnimalsInvolved.report_number AS report_number'));
$sql->sortby($sort, $dir);
$citizenreports = $modx->getCollection('CitizenReport',$sql);
error_log( print_r($citizenreports, true) );
$c = $modx->getCollectionGraph('CitizenReport', '{"AnimalsInvolved":{}}');
foreach($c as $report){
if(is_object($report)){
echo '<h2>['.$report->get('report_number').'] '.$report->get('name').'</h2>';
if(count($report->getMany('AnimalsInvolved'))){
echo '<h3>Animals Involved</h3>';
echo '<ul>';
foreach($report->getMany('AnimalsInvolved') as $a){
if(is_object($a)){
echo '<li>'.$a->get('animal_type').'</li>';
}
}
echo '</ul>';
} else {
echo 'No associated animals found for '.$report->get('name').'<br />';
}
}
}
Final note about the relationship of the AnimalsInvolved, assuming that more than one can be assigned to a given CitizenReport, note the line for the relationship is now a composite and set with a cardinality of many.
$c = $modx->getCollectionGraph( 'CitizenReport', '{ "AnimalsInvolved":{} }' );
<object class="CitizenReport" table="citizen_reports" extends="xPDOSimpleObject"> <composite alias="AnimalsInvolved" class="AnimalsInvolved" local="report_number" foreign="report_number" cardinality="many" owner="local" /> ...
<object class="AnimalsInvolved" table="animals_involved" extends="xPDOSimpleObject"> <aggregate alias="CitizenReport" class="CitizenReport" local="report_number" foreign="report_number" cardinality="one" owner="foreign" /> ...
$criteria = $modx->newQuery('CitizenReport');
$criteria->sortby('CitizenReport.name');
$c = $modx->getCollectionGraph( 'CitizenReport', '{ "AnimalsInvolved":{} }', $criteria );
print_r($c);
exit;
$reports = $modx->getCollection( 'CitizenReport');
foreach ($reports as $r) {
print_r($r->toArray());
exit;
}
Get the values of the object in array format: