Witam,
Używam MODx Revolution i xPDO. Mam problem ze stworzeniem odpowiedniego zapytania przy pomocy xPDO
schemat tabel mojego komponentu:
<?xml version="1.0" encoding="UTF-8"?>
<model package="Klima" 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" />
<field key="firma" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" default="0" index="index" />
<field key="region" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" default="0" index="index" />
</object>
</model>
Z kolei zapytanie SQL, które chciałem wykonać to:
SELECT GROUP_CONCAT(modx_klima_regiony.region ORDER BY modx_klima_regiony.region ASC ) regiony, modx_klima_firmy.* FROM modx_klima_firmy LEFT JOIN modx_klima_firma_region ON (modx_klima_firmy.id = modx_klima_firma_region.firma) LEFT JOIN modx_klima_regiony ON (modx_klima_regiony.id = modx_klima_firma_region.region) GROUP BY modx_klima_firmy.id ORDER BY modx_klima_firmy.nazwa ASC
Próbowałem w ten sposób ale nie dało żadnych rezultatów:
$c = $modx->newQuery('klimaFirma');
$c->select('
GROUP_CONCAT
( Region.region ORDER BY Region.region ASC )
AS regiony, klimaFirma.*
');
$c->leftJoin('klimaFirmaRegion','FirmaRegion');
$c->leftJoin('klimaRegion','Region','Region.id = FirmaRegion.region');
'klimaFirma.nazwa:LIKE' => '%ma%',
));
$c->sortby('klimaFirma.id','ASC');
$c->groupby('klimaFirma.id');
$firmy = $modx->getCollection('klimaFirma', $c);
foreach ($firmy as $firma) {
print('<br/>'.$firma->get('nazwa').' '.$firma->get('regiony')); }
--
Pozdrawiam
MM