Mam taką sytuację: tabela Client zawierająca pole company_id, jest to klucz obcy z tabeli Company, która to z kolei zawiera pole address_id będące kluczem do tabeli Address.
Wygląda to mniej więcej tak:
CREATE TABLE client ( id serial NOT NULL, "login" character varying(50) NOT NULL, "password" character(40) NOT NULL, first_name character varying(50), last_name character varying(50), max_receivers integer NOT NULL, max_cargos integer NOT NULL, invoices_avaliable integer NOT NULL, balance integer, client_type_id integer, company_id integer, CONSTRAINT client_pkey PRIMARY KEY (id), CONSTRAINT client_client_type_id_fkey FOREIGN KEY (client_type_id) REFERENCES client_type (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT client_company_id_fkey FOREIGN KEY (company_id) REFERENCES company (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT client_login_key UNIQUE ("login") )
CREATE TABLE company ( id serial NOT NULL, name character varying(100) NOT NULL, nip character varying(13) NOT NULL, phone character varying(50), regon character varying(15), address_id integer, CONSTRAINT company_pkey PRIMARY KEY (id), CONSTRAINT company_address_id_fkey FOREIGN KEY (address_id) REFERENCES address (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION )
CREATE TABLE address ( id serial NOT NULL, "local" character varying(10) NOT NULL, building character varying(10) NOT NULL, street character varying(100) NOT NULL, city character varying(50) NOT NULL, post_code character varying(6) NOT NULL, country character varying(50) NOT NULL, CONSTRAINT address_pkey PRIMARY KEY (id) )
daje mi to:
<?php $criteria = new Criteria(); $criteria->add(ClientPeer::ID, $clientId); $users = ClientPeer::doSelectJoinAllExceptClientType($criteria); ?>
czyli nie to czego oczekuję.
SELECT client.ID, client.LOGIN, client.PASSWORD, client.FIRST_NAME, client.LAST_NAME, client.MAX_RECEIVERS, client.MAX_CARGOS, client.INVOICES_AVALIABLE, client.BALANCE, client.CLIENT_TYPE_ID, client.COMPANY_ID, company.ID, company.NAME, company.NIP, company.PHONE, company.REGON, company.ADDRESS_ID FROM client, company WHERE client.ID=11 AND client.COMPANY_ID=company.ID
SELECT * FROM client JOIN company ON client.company_id = company.id JOIN address ON company.address_id = address.id WHERE client.id = 11
Witam kto¶ mo¿e wie jak rozwi±zac ten problem Bo mam podobny problem
<?php $c = new Criteria(); $c->add(ClientPeer::ID, $client_id); $c->addJoin(ClientPeer::COMPANY_ID, CompanyPeer::ID); $c->addJoin(CompanyPeer::ADDRESS_ID , AddressPeer::ID); $joinHelper = new sfPropelCustomJoinHelper('Client'); $joinHelper->addSelectTables('Client', 'Company', 'Address'); $joinHelper->setHas('Client', 'Company'); $joinHelper->setHas('Company', 'Address'); $result = $joinHelper->doSelect($c); ?>
ktos mi wyjasni czym jest ta klasa sfPropelCustomJoinHelper . w API dokumentacji jej nie ma w pluginach tez czegos takiego nie ma a symfony mi pisze ze nie ma takiej klasy
http://trac.symfony-project.com/wiki/ApplyingCustomJoinsUsingHelper
Kurcze powoli dostaje do glowy z tym propelem ;/. Mam kolejny problem
<?php public http://www.php.net/static function pobierzTerminarzPoSezonie($idSezonu){ $c = new Criteria(); $c->add(SezonyPeer::ID,$idSezonu); $criterion = $c->getNewCriterion(WynikiPeer::WYSCIG_POZYCJA,1); $criterion -> addOr(WynikiPeer::ID,Criteria::ISNULL); $c->add($criterion); $c->addJoin(SezonyPeer::ID,WyscigiPeer::SEZON_ID,'left outer JOIN'); $c->addJoin(WyscigiPeer::ID,WynikiPeer::WYSCIG_ID,'left outer JOIN'); $c->addJoin(WyscigiPeer::TOR_ID,ToryPeer::ID,'left outer JOIN'); $c->addJoin(WynikiPeer::KIEROWCA_ID,KierowcyPeer::ID,'left outer JOIN'); // Instead of calling ArticlePeer, we use a sfPropelCustomJoinHelper class $joinHelper = new sfPropelCustomJoinHelper('Sezony'); // Tell the joiner to select fields from the following tables $joinHelper->addSelectTables('Wyscigi', 'Wyniki','Kierowcy','Tory'); // Set up the relatoinship betweeen Book and Category. $joinHelper->setHas('Sezon', 'Wyscigi'); $joinHelper->setHas('Wyscigi','Wyniki'); $joinHelper->setHas('Wyscigi','Tory'); $joinHelper->setHas('Wyniki','KIerowcy'); return $joinHelper->doSelect($c); } ?>
<?php $criterion -> addOr(WynikiPeer::ID,Criteria::ISNULL); ?>
<?php $criterion->addOr(WynikiPeer::ID,'',Criteria::ISNULL); ?>
No niestety dalej nic najbardziej irytujacy jest fakt ze sie debuger nie wlancza, Kurcze az mi juz glupio ;/ ale serio nie wiem co w tym moze byc zle
chcialby uzyskac dokladnie takie zapytanie
SELECT * FROM sezony LEFT OUTER JOIN wyscigi ON ( sezony.ID = wyscigi.SEZON_ID ) JOIN tory ON ( tory.id = wyscigi.tor_id ) LEFT OUTER JOIN wyniki ON ( wyscigi.id = wyniki.wyscig_id ) LEFT OUTER JOIN kierowcy ON ( kierowcy.id = wyniki.kierowca_id ) WHERE Sezony.`id` =4 AND ( wyniki.wyscig_pozycja =1 OR wyniki.id IS NULL )
<?php $c = new Criteria(); $c1 = $c->getNewCriterion(SezonyPeer::ID,1); $c1->addOr(SezonyPeer::ID,2); $c->add($c1); return SezonyPeer::doSelect($c); ?>
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)