Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [symfony][propel] funkcja sql jako kryterium
Forum PHP.pl > Forum > PHP > Frameworki
phpion
Hej,
od dłuższego czasu walczę z pewnym problemem i nie mogę sobie poradzić. Otóż mam taki kod:
  1. <?php
  2. $c = new Criteria();
  3. $c->add(sfGuardUserPeer::IS_ACTIVE, false);
  4. $c->addAsColumn('timediff', 'TIME_TO_SEC(TIMEDIFF(NOW(), created_at))');
  5. $c->getNewCriterion(sfGuardUserPeer::ID, 'timediff > '.sfConfig::get('app_time_expired_user'), Criteria::CUSTOM);
  6. $c->addAscendingOrderByColumn(sfGuardUserPeer::USERNAME);
  7. $users = sfGuardUserPeer::doSelect($c);
  8. ?>

W rezultacie chciałbym otrzymać takie zapytanie:
  1. SELECT id, username, is_active, TIME_TO_SEC(TIMEDIFF(NOW(), created_at)) AS timediff FROM sf_guard_user WHERE timediff>86400 AND is_active=0 ORDER BY username;

Co bym jednak nie zrobił to zawsze otrzymuję powyższe zapytanie ale bez warunku timediff>86400... W sumie nie jestem pewien pierwszego parametru w $c->getNewCriterion().
Czy mógłbym prosić o pomoc w rozwiązaniu tego problemu?

PS: przy okazji: w jaki sposób można podejrzeć tworzone zapytanie (poprzez echo, nie w debugerze). echo $c, echo $c->__toString() nie działa...
destroyerr
Moim zdaniem zapomniałeś o dodaniu criterion'a:
  1. <?php
  2. $c1 = $c->getNewCriterion(sfGuardUserPeer::ID, 'timediff > '.sfConfig::get('app_time_expired_user'), Criteria::CUSTOM);
  3. $c->add($c1);
  4. ?>

Poza tym jeśli chcesz jeszcze pobrać inne kolumny to musisz dać jeszcze:
  1. <?php
  2. sfGuardUserPeer::addSelectColumns($c);
  3. ?>

Dodam jeszcze, że u mnie nie udało się uruchomić tego zapytania.

Tworzone zapytanie sprawdzisz przez:
  1. <?php
  2. $c->toString();
  3. ?>

ale bez parametrów, jeśli chcesz całe zapytanie to:
  1. <?php
  2. Propel::getConnection()->getLastExecutedQuery();
  3. ?>
phpion
Dzięki za odpowiedź.
W sumie na razie załatwiłem to zwykłym zapytaniem SQL i na razie niechaj tak pozostanie (skoro Tobie nie udało się odpalić podobnego zapytania).
Niemniej jednak jeszcze raz dzięki za pomoc.
destroyerr
Miałem na myśli to, że Twoje zapytanie jest błędne, ponieważ w WHERE nie można korzystać aliasu na kolumnę. Chyba, że się mylę.
phpion
Fakt wstydnis.gif
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.