Witam,

Używam MODx Revolution i xPDO. Mam problem ze stworzeniem odpowiedniego zapytania przy pomocy xPDO

schemat tabel mojego komponentu:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <model package="Klima" baseClass="xPDOObject" platform="mysql" defaultEngine="MyISAM">
  3. <object class="klimaFirma" table="klima_firmy" extends="xPDOSimpleObject">
  4. <composite alias="FirmaRegion" class="klimaFirmaRegion" local="id" foreign="firma" cardinality="many" owner="local" />
  5. <field key="nazwa" dbtype="varchar" precision="250" phptype="string" null="false" default="" index="index" />
  6. <field key="dzialalnosc" dbtype="text" phptype="string" null="false" default="" />
  7. <field key="dzialalnosc_en" dbtype="text" phptype="string" null="false" default="" />
  8. <field key="www" dbtype="varchar" precision="250" phptype="string" null="false" default="" />
  9. <field key="email" dbtype="varchar" precision="250" phptype="string" null="false" default="" />
  10. <field key="tel" dbtype="varchar" precision="30" phptype="string" null="false" default="" />
  11. <field key="fax" dbtype="varchar" precision="30" phptype="string" null="false" default="" />
  12. <field key="adres" dbtype="varchar" precision="100" phptype="string" null="false" default="" />
  13. <field key="miasto" dbtype="varchar" precision="30" phptype="string" null="false" default="" />
  14. <field key="kod" dbtype="varchar" precision="10" phptype="string" null="false" default="" />
  15. <field key="wpis" dbtype="enum" precision="'2','1','0'" phptype="string" null="false" default="0" />
  16. <field key="logo" dbtype="varchar" precision="250" phptype="string" null="false" default="" />
  17. <field key="logo_a" dbtype="enum" precision="'0','1'" phptype="string" null="false" default="0" />
  18. <field key="rozsz" dbtype="varchar" precision="100" phptype="string" null="false" default="" />
  19. <field key="o_kont" dbtype="varchar" precision="200" phptype="string" null="false" default="" />
  20. <field key="t_kont" dbtype="varchar" precision="50" phptype="string" null="false" default="" />
  21. <field key="em_kont" dbtype="varchar" precision="50" phptype="string" null="false" default="" />
  22. <field key="nazwa2" dbtype="varchar" precision="250" phptype="string" null="false" default="" index="index" />
  23. <field key="adres2" dbtype="varchar" precision="100" phptype="string" null="false" default="" />
  24. <field key="kod2" dbtype="varchar" precision="10" phptype="string" null="false" default="" />
  25. <field key="miasto2" dbtype="varchar" precision="30" phptype="string" null="false" default="" />
  26. <field key="nip" dbtype="varchar" precision="30" phptype="string" null="false" default="" />
  27. <field key="kolejnosc" dbtype="int" precision="11" phptype="integer" attributes="unsigned" null="false" default="0" />
  28. <field key="aktywacja" dbtype="enum" precision="'0','1'" phptype="string" null="false" default="0" />
  29. <field key="data" dbtype="date" precision="11" phptype="integer" attributes="unsigned" null="false" default="" />
  30. <field key="koniec" dbtype="date" precision="11" phptype="string" attributes="unsigned" null="false" default="" />
  31. <field key="polecamy" dbtype="enum" precision="'0','1'" phptype="string" null="false" default="0"/>
  32. </object>
  33. <object class="klimaRegion" table="klima_regiony" extends="xPDOSimpleObject">
  34. <composite alias="FirmaRegion" class="klimaFirmaRegion" local="id" foreign="region" cardinality="many" owner="local" />
  35. <field key="pid" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" default="0" />
  36. <field key="region" dbtype="varchar" precision="100" phptype="string" null="false" default="" index="index" />
  37. </object>
  38. <object class="klimaFirmaRegion" table="klima_firma_region" extends="xPDOSimpleObject">
  39. <aggregate alias="Firma" class="klimaFirma" local="firma" foreign="id" cardinality="one" owner="foreign" />
  40. <aggregate alias="Region" class="klimaRegion" local="region" foreign="id" cardinality="one" owner="foreign" />
  41. <field key="firma" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" default="0" index="index" />
  42. <field key="region" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" default="0" index="index" />
  43. </object>
  44. </model>


Z kolei zapytanie SQL, które chciałem wykonać to:

  1. 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:

  1. $c = $modx->newQuery('klimaFirma');
  2. $c->select('
  3. GROUP_CONCAT
  4. ( Region.region ORDER BY Region.region ASC )
  5. AS regiony, klimaFirma.*
  6. ');
  7. $c->leftJoin('klimaFirmaRegion','FirmaRegion');
  8. $c->leftJoin('klimaRegion','Region','Region.id = FirmaRegion.region');
  9. $c->where(array(
  10. 'klimaFirma.nazwa:LIKE' => '%ma%',
  11. ));
  12. $c->sortby('klimaFirma.id','ASC');
  13. $c->groupby('klimaFirma.id');
  14.  
  15.  
  16. $firmy = $modx->getCollection('klimaFirma', $c);
  17.  
  18. foreach ($firmy as $firma) {
  19. print('<br/>'.$firma->get('nazwa').' '.$firma->get('regiony'));
  20. }
  21.  
  22. echo 'Wszystkie firmy: '.count($firmy);


--
Pozdrawiam
MM