Database explorer joinWhere a alias připojované tabulky

Nax
Člen | 35
+
0
-

Zdravím,

snažím se použít Nette Database Explorer pro joinnování.

Mám tabulku contract, tabulku contracting_party (smluvní strana) a pak M:N tabulku contracting_party_contract, která mimo toho že propojuje kontrakt se smluvní stranou drží informaci zda-li se jedná o jednu smluvní stranu či o druhou.

Potřebuju udělat select který mi připojí ke každému kontraktu jeho zadavatele a i dodavatele (2 smluvní strany). Čili tabulku contracting_party potřebuju připojit 2×, jednou pod názvem dodavatel a porduhé pod názvem zadavatel, podle parametru side_type (0, 1) který se nachází v joinovací tabulce contracting_party_contract. Na to si však musím při joinnování tabulku oaliasovat a nepřišel jsem na to jak se to při joinWhere dělá.

Zkoušel jsem něco jako:

$this->db->table('contract')
            ->joinWhere("contracting_party_contract AS contractors_join", "contracting_party_contract.contract_id = contract.id")
            ->joinWhere("contracting_party AS contractors", "contractors_join.contracting_party_id = contractors.id");

(připojoval jsem jen zatím jednu smluvní stranu ale bez úspěchu)

Lze toto nějak provést?

Díky

Nax
Člen | 35
+
0
-

Takto bych chtěl aby vypadal vygenerovaný select cca.

$this->db->query("
            SELECT contract.*,
            GROUP_CONCAT(DISTINCT contractor.name SEPARATOR ', ') AS contractor_name,
            GROUP_CONCAT(DISTINCT contracting_authority.name SEPARATOR ', ') AS contracting_authority_name
            FROM contract
            LEFT JOIN contracting_party_contract contractor_join ON(contractor_join.contract_id = contract.id AND contractor_join.contracting_side = 0)
            LEFT JOIN contracting_party contractor ON(contractor_join.contracting_party_id = contractor.id)
            LEFT JOIN contracting_party_contract contracting_authority_join ON(contracting_authority_join.contract_id = contract.id AND contracting_authority_join.contracting_side = 1)
            LEFT JOIN contracting_party contracting_authority ON(contracting_authority_join.contracting_party_id = contracting_authority.id)
            GROUP BY contract.id
        ")->fetchAll()