Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] Problem z wykonaniem zapytania przez DOctrine
Forum PHP.pl > Forum > Przedszkole
Juzek
Witam.

Chcę wykonać następujące zapytanie w komponęcie:
  1. SELECT DISTINCT(`Cities`.`cities_id`) FROM `Cities`
  2. INNER JOIN `Institutions`
  3. INNER JOIN `Offers`
  4. WHERE `Offers`.`offers_institutions_id` = `Institutions`.`institutions_id`
  5. AND `Institutions`.`institutions_cities_id` = `Cities`.`cities_id`


Wklejone do PMA zwraca prawidłowy wynik.

Próby wywołań:
  1. $this->eW = Doctrine_Query::create()->query('
  2. SELECT DISTINCT(`Cities`.`cities_id`) FROM `Cities`
  3. INNER JOIN `Institutions`
  4. INNER JOIN `Offers`
  5. WHERE `Offers`.`offers_institutions_id` = `Institutions`.`institutions_id`
  6. AND `Institutions`.`institutions_cities_id` = `Cities`.`cities_id`
  7. ');


(lub po zakomentowaniu powyższego)

  1. $this->eW = Doctrine_Query::create()
  2. ->select('DISTINCT(`Cities`.`cities_id`)')
  3. ->from('Cities c, Institutions i, Offers o')
  4. ->where('o.offers_institutions_id = i.institutions_id')
  5. ->andWhere('i.institutions_cities_id = c.cities_id')
  6. ->execute();


W obu przypadka otrzymuje:

500: Couldn't find class `Cities`.

... mimo, że w dalszej części klasy prawidłowo wykonuje się
  1. $this->citiess = Doctrine::getTable('Cities')->createQuery('a')->orderBy('cities_title ASC')->execute();


Czym może to być spowodowane ?

Dziękuję z góry za pomoc, wracam na Google w poszukiwaniu odpowiedzi ...
thek
Skoro masz nadany dla tabeli Cities alias c to czemu go nie używasz? Spróbuj
->select('DISTINCT c.cities_id')
I zrób z tego sensowne joiny a nie iloczyny kartezjańskie winksmiley.jpg
destroyerr
Ja to bym usunął wszystkie lewe apostrofy, bo zapytania parsuje Doctrine i dlatego może mieć problem z odnalezieniem odpowiedniej klasy, która w nazwie ma mieć te apostrofy.
thek
Ja ogólnie nie używam Doctrine, ale skoro pluje się o klasę a widać jak byk, że różnicą między wszystkimi zapisami jest użycie odwróconego (lewego) apostrofu to na bank on jest przyczyną i jego trzeba z zapytania usunąć. Stąd właśnie poradziłem użycie aliasu i przez to ów apostrof zniknąłby i tym samym zapytanie powinno zostać łyknięte.

Trochę ruszenia szarych komórek. Ja nie znam Doctrine kompletnie, a mimo wszystko logicznie myśląc powiązałem odwrócone apostrofy z błędem i niemal pewien jestem, że ich usunięcie z zapisu naprawi problem.
Juzek
Witam.

Problem z zapytaniem rozwiązałem w ten sposób:

  1. $this->o = Doctrine_Query::create()->select('*')->distinct(`Cities` . `cities_id`)->from('Cities c, Institutions i, Offers o')->where('o.offers_institutions_id = i.institutions_id')->andWhere('i.institutions_cities_id = c.cities_id')->execute();


Po kilku minutach rozwiązałem ten problem, chciałem się pochwalić ale na podstronie "edycja postu" skrypt forum wklejał niepoprawną treść a podstrona "odpowiedź" wyrzucała mi pusty błąd ...



Pozdrawiam.
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.