Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] DOCTRINE, PROSZĘ O POMOC
Forum PHP.pl > Forum > PHP > Frameworki
blackroger
takie zapytanie
:

  1. $recordsObjs = Doctrine_Query::create()
  2. ->select('mrg.id as id, mrg.name as name')
  3. ->addSelect('(select count(*) from mailing_email where mailing_recipent_group = id and deleted <> 1) as count_emails')
  4. ->addSelect('(select count(*) from inter_mailing_group where mailing_recipent_group = id) as count_shipping')
  5. ->from('MailingRecipentGroup mrg')
  6. ->where('mrg.tomcrm_client = ?', $tomCRMClientId)
  7. ->addWhere('mrg.deleted <> ?', 1);
  8.  


JAK SIĘ PORUSZAĆ po podzapytaniach?questionmark.gif?

dokładnie tu:

  1. ->addSelect('(select count(*) from mailing_email where mailing_recipent_group = id and deleted <> 1) as count_emails')
  2.  


chodzi o ten człon "and deleted <> 1". Chcę się odnosić do mailing_email.deleted samego podzapytania(chce traktować to jako wewnetrzne osobne podzapytania), ale niestety DOCTRINE bierze sobie samo zadeklarowany Model i traktuje to jako MailingRecipentGroup.deleted (bo też posiada takie pole...). Jak to ominąć?

Proszę aby ktoś raz na zawsze mi objaśnił jak poruszac się w podzapytaniach w Doctrine, bo ostatnimi czasy przy bardziej zaawansowanych zapytaniach psychicznie nie wyrabiam smile.gif Szukałem w dokumentacji ale niestety żaden zastosowany tam przykład nie pomaga...


Wracając do pytania z innej strony....już kiedyś raz zadawałem to pytanie ale nikt nie udzielił odpowiedzi....
Na stronie Doctrine jest taki przykład....

  1. $q = Doctrine_Query::create()
  2. ->select('u.id')
  3. ->addSelect('(SELECT p.phonenumber FROM Phonenumber p WHERE p.user_id = u.id LIMIT 1) as phonenumber')
  4. ->from('User u');


poprzez analogię próbuje:

  1.  
  2. $recordsObjs = Doctrine_Query::create()
  3. ->select('mrg.id as id, mrg.name as name')
  4. ->addSelect('(select count(*) from MailingEmail me where me.mailing_recipent_group = mrg.id and me.deleted <> 1 limit 1) as count_emails')
  5. ->from('MailingRecipentGroup mrg')
  6. ->addWhere('mrg.deleted <> ?', 1);


i ciągle błąd....o co chodzi...wtf?
Daiquiri
Proszę poprawić temat, na taki który lepiej odda charakter problemu.
Zyx
Doctrine trochę średnio sobie radzi z obsługą podzapytań, niemniej u Ciebie pojawia się problem tego typu, że masz podzapytanie, a nigdzie go nie wykorzystujesz. Fajnie byłoby też, gdybyś np. podał jakieś informacje, CO to za błąd Ci się wyświetla...
blackroger
Udało się... napisze to, jak ja to zrobiłem. Jakby ktoś miał inny sposób to proszę aby się podzielił...

Przekształciłem powyższą logikę zapytania w następujący sposób:

  1.  
  2. $recordsObjs = Doctrine_Query::create()
  3. ->select('mrg.id as id, mrg.name as name');
  4.  
  5. $recordsObjs2 = $recordsObjs->createSubquery()
  6. ->select('count(me.id)')
  7. ->from('MailingEmail me')
  8. ->where('me.mailing_recipent_group = mrg.id')
  9. ->addWhere('me.deleted <> 1')
  10. ->limit(1);
  11.  
  12. $recordsObjs3 = $recordsObjs->createSubquery()
  13. ->select('count(img.id)')
  14. ->from('InterMailingGroup img')
  15. ->innerJoin('img.Mailing m')
  16. ->where('img.mailing_recipent_group = mrg.id')
  17. ->addWhere('m.deleted <> 1')
  18. ->limit(1);
  19.  
  20. $recordsObjs->from('MailingRecipentGroup mrg')
  21. ->addSelect('('.$recordsObjs2->getDql().') as count_emails')
  22. ->addSelect('('.$recordsObjs3->getDql().') as count_shipping')
  23. ->where('mrg.deleted <> ?', 1);
  24.  


jak widać istnieje taka funkcja jak createSubquery(). Pozwala ona utworzyć "osobne zapytania" które nie są identyfikowane jednoznacznie przez główny model "from". Co najlepsze istnieje możliwość połączenia tych podzapytań z poszczególnymi wierszami zapytania głównego

  1. ->where('img.mailing_recipent_group = mrg.id')


W ten sposób otrzymujemy nie kłócące się ze sobą obiekty modelu.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.