Hi,
It’s me again. I’ve started working with xPDO and I like it very much.
I have a problem with retrieving records after leftjoin - actually with outputting them.
I have to tables and one reference table.
One is for firms other for regions. One firm could be in many regions.
So in my reference table i put: nazwa (reference to firmname in firms table) and region (reference to regions table)
My XML Schema looks like that:
<?xml version="1.0" encoding="UTF-8"?>
<model package="klimatyzacja" baseClass="xPDOObject" platform="mysql" defaultEngine="MyISAM">
<object class="klimaFirma" table="klima_firmy" extends="xPDOSimpleObject">
<composite alias="FirmaRegion" class="klimaFirmaRegion" local="id" foreign="firma" cardinality="many" owner="local" />
<field key="nazwa" dbtype="varchar" precision="250" phptype="string" null="false" default="" index="index" />
<field key="dzialalnosc" dbtype="text" phptype="string" null="false" default="" />
<field key="dzialalnosc_en" dbtype="text" phptype="string" null="false" default="" />
<field key="www" dbtype="varchar" precision="250" phptype="string" null="false" default="" />
<field key="email" dbtype="varchar" precision="250" phptype="string" null="false" default="" />
<field key="tel" dbtype="varchar" precision="30" phptype="string" null="false" default="" />
<field key="fax" dbtype="varchar" precision="30" phptype="string" null="false" default="" />
<field key="adres" dbtype="varchar" precision="100" phptype="string" null="false" default="" />
<field key="miasto" dbtype="varchar" precision="30" phptype="string" null="false" default="" />
<field key="kod" dbtype="varchar" precision="10" phptype="string" null="false" default="" />
<field key="wpis" dbtype="enum" precision="'2','1','0'" phptype="string" null="false" default="0" />
<field key="logo" dbtype="varchar" precision="250" phptype="string" null="false" default="" />
<field key="logo_a" dbtype="enum" precision="'0','1'" phptype="string" null="false" default="0" />
<field key="rozsz" dbtype="varchar" precision="100" phptype="string" null="false" default="" />
<field key="o_kont" dbtype="varchar" precision="200" phptype="string" null="false" default="" />
<field key="t_kont" dbtype="varchar" precision="50" phptype="string" null="false" default="" />
<field key="em_kont" dbtype="varchar" precision="50" phptype="string" null="false" default="" />
<field key="nazwa2" dbtype="varchar" precision="250" phptype="string" null="false" default="" index="index" />
<field key="adres2" dbtype="varchar" precision="100" phptype="string" null="false" default="" />
<field key="kod2" dbtype="varchar" precision="10" phptype="string" null="false" default="" />
<field key="miasto2" dbtype="varchar" precision="30" phptype="string" null="false" default="" />
<field key="nip" dbtype="varchar" precision="30" phptype="string" null="false" default="" />
<field key="kolejnosc" dbtype="int" precision="11" phptype="integer" attributes="unsigned" null="false" default="0" />
<field key="aktywacja" dbtype="enum" precision="'0','1'" phptype="string" null="false" default="0" />
<field key="data" dbtype="date" precision="11" phptype="integer" attributes="unsigned" null="false" default="" />
<field key="koniec" dbtype="date" precision="11" phptype="string" attributes="unsigned" null="false" default="" />
<field key="polecamy" dbtype="enum" precision="'0','1'" phptype="string" null="false" default="0"/>
</object>
<object class="klimaRegion" table="klima_regiony" extends="xPDOSimpleObject">
<composite alias="FirmaRegion" class="klimaFirmaRegion" local="id" foreign="region" cardinality="many" owner="local" />
<field key="pid" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" default="0" />
<field key="region" dbtype="varchar" precision="100" phptype="string" null="false" default="" index="index" />
</object>
<object class="klimaFirmaRegion" table="klima_firma_region" extends="xPDOSimpleObject">
<aggregate alias="Firma" class="klimaFirma" local="firma" foreign="id" cardinality="one" owner="foreign" />
<aggregate alias="Region" class="klimaRegion" local="region" foreign="id" cardinality="one" owner="foreign" />
<fields key="firma" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" default="0" index="index" />
<fields key="region" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" default="0" index="index" />
</object>
</model>
I’d like to print firm name and all regions that are connected with it. Normally after JOIN I would have $row array with fields from one and the other table.
For now I don’t want to set up any criteria (besides firm name) I just want to get all firms with %name% and all regions connected to it.
How one should do it in xPDO?
My snippet looks like that:
$search = $_POST['search'];
$query = $modx->newQuery('klimaFirma');
$query->leftJoin('klimaFirmaRegion','FirmaRegion');
$query->where(array(
'klimaFirma.nazwa:LIKE' => '%'.$search.'%'
));
$query->sortby('klimaFirma.nazwa','ASC');
//$query->limit(4);
$firmy = $modx->getCollection('klimaFirma', $query);
echo 'Wszystkie firmy: '.count($firmy);
foreach ($firmy as $firma) {
print('<br/>'.$firma->nazwa.' '.$firma->region);
}
--
Regards
MM