Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony][Propel] Wyrażenie ... WHERE ... IN (SELECT ...)
Forum PHP.pl > Forum > PHP > Frameworki
Thomashek
Mam problem z rozkazaniem klasie, aby pokazała tylko takie obiekty, których wartość ID nie występuje w kolumnie wartości ID2 innej tabeli, czyli chcę tak rozkazać klasie wygenerowanej przez Propela, aby przetłumaczyła to na taki SQL:
  1. SELECT tabela1.ID FROM tabela1 WHERE tabela1.ID NOT IN (SELECT tabela2.ID2 FROM tabela2)


W jaki sposób tego dokonać?

Z góry dziękuję za odpowiedzi
LBO
Obiło mi się o uszy, że Propel nie obsługuje zagnieżdżonych zapytań.

edit:

Żeby nie było - jestem tego pewien.

Wyciągnij PDO i użyj własnego zapytania.
Thomashek
Hm, chciałem zrobić coś w rodzaju:
  1. <?php
  2. $c = new Criteria();
  3. $c->add('tabela1.ID NOT IN (SELECT tabela2.ID2 FROM tabela2)');
  4. return Tabela1Peer:doSelect($c);
  5. ?>


Jednak to zapytanie wewnątrz add() jest konwertowane na niepoprawne :/ Można w jakiś prosty sposób dodać warunek w postaci zwykłego SQLa do zapytania?

//dodano:
Powyższy sposób działa, jeśli zamiast tamtego add-a zrobi się taki:
  1. <?php
  2. $c->add('tabela1.ID NOT IN (SELECT ID2 FROM tabela2)');
  3. ?>

Czyli usunąć trzeba nazwę tabeli przed polem. Ale to i tak rozwiązanie bardzo naokoło, nie podoba mi się (choć już działa) :/

//dodano2:
Tfu, nie działa. Bo dodaje IS NULL na końcu. Potrzebuję nadal odpowiedzi na pytanie, czy można dodać warunek w postaci zwykłego SQLa do obiektu Criteria?
LBO
Zależy Tobie na obiektach, prawda?

Nic prostszego, możesz użyć własnego zapytania w czystym SQL jak i posiadać po tym obiekty.

Tutorial
Thomashek
Dzięki, pomogłeś.

A konkretnie to, o co mi chodziło:
  1. <?php
  2. $c->add('tabela1.ID', 'tabela1.ID NOT IN (SELECT ID2 FROM tabela2)', Criteria::CUSTOM);
  3. ?>

Dzięki temu CUSTOM nie jest w ogóle ruszany warunek w środku, nie jest nic dopisywane - czyli tak, jak chciałem. Dzięki.
LBO
  1. <?php
  2. $c = new Criteria();
  3. $select = "tabela1.ID NOT IN (SELECT tabela2.ID2 FROM tabela2)";
  4. $c->add(Tabela1Peer::ID, $select, Criteria::CUSTOM);
  5. return Tabela1Peer:doSelect($c);
  6. ?>

edit:
Byłeś szybszy :]
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.