Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] Propel, pobieranie określonych kolumn
Forum PHP.pl > Forum > PHP > Frameworki
Balon
W jaki sposób pobrać tylko określone kolumny przy zapytaniu? Przez Criteria? Właśnie próbuje i to mi nic nie daje. Pobiera nadal wszystkie kolumny.

  1. <?php
  2. $c->addSelectColumn(UserDataPeer::ACTIVATED);
  3. ?>
mike
  1. <?php
  2.  
  3. $c->clearSelectColumns()
  4. $c->addSelectColumn(UserDataPeer::ACTIVATED);
  5.  
  6. ?>
Balon
Hm, nie działa.

Pobieram to tak, najpierw jadę pierwszą tabelę User pobieram jeden rekord i jadę

  1. <?php
  2. $c = new Criteria;
  3. $c->add(UserPeer::USERNAME, $username);
  4. $c->add(UserPeer::PASSWORD, $password);
  5.  
  6. $u = UserPeer::doSelectOne($c);
  7.  
  8. // user exists?
  9. if (!is_null($u))
  10. {
  11. $c = new Criteria;
  12. $c->clearSelectColumns();
  13. $c->addSelectColumn(UserDataPeer::ACTIVATED);
  14. $c->setLimit(1);
  15.  
  16. $activated = $u->getUserDatas($c);
  17. ?>


I to w linii 16 generuje wieeelkie zapytanie z masą ilością kolumn, a ja potrzebuje jednej.
destroyerr
Propel generuje metody, żeby pobierać wszystkie kolumny do obiektów, nie pojedyncze kolumny.
Wyjściem jest dodanie do criterii id usera.
Balon
Nie wydaje mi się, żeby było to niewykonalne. Chyba by było bez sensu pobierać masę danych jeśli potrzebujesz tylko jedną kolumnę.
destroyerr
Jest wykonalne, ale nie tak prosto jak chcesz tego.
  1. <?php
  2. $c->add(UserDataPeer::USER_ID, $user->getId());
  3. $rs = BasePeer::doSelect($c);
  4. $rs->next();
  5. $activated = $rs->get(1);
  6. ?>

Powinno zadziałać, ale głowy nie daję tongue.gif
Balon
Hm, ale addSelectColumn od niczego chyba nie jest, fakt?
destroyerr
Jest od dodania kolumny do wybrania w zapytaniu. Wynika to z dokumentacji i z działania też. Sprawdziłeś kod który podałem? Zadziałało jak tego potrzebujesz?
Balon
Cytat
Jest od dodania kolumny do wybrania w zapytaniu

No to powinno działać tak jak tego potrzebuje - nie działa.
destroyerr
A masz jakiś błąd albo coś nie tak?
Twoim sposobem nie da się tego zrobić. Zobacz sobie metode getUserDatas wygenerowana przez propela tam dodawane są za pomoca właśnie addSelectColumn wszystkie kolumny, ponieważ metoda getUserDatas ma zwrócić obiekty!
Można jeszcze nadpisać metode getUserDatas.
Balon
Cytat
Można jeszcze nadpisać metode getUserDatas.

No tak, to będzie najlepsze rozwiązanie.

Teraz mam inny problem.

Jak pobieram coś w ten sposób
  1. <?php
  2. $activated = $u->getUserDatas($c);
  3. ?>

To mimo, że generuje dobre zapytanie to otrzymywane dane są zupełnie inne, kompletnie przekłamane.. A kiedy wykonuje sobie to zapytanie z poziomu phpmyadmina to jest wszystko ok. Czego może to być wina?

Czy może to być wina tego, że tabele odwołujące się do tabeli User nie posiadają Primary Key ?
destroyerr
Może te dane są przekłamane ze względu na kolumne na którą dodałeś. Chyba, że ten kawałek kodu już usunąłeś.
Balon
Jesteś po prostu świetny! Pomogłeś mi raz dwa, a ja problem mam raz dwa z głowy. Ogromny plus dla Ciebie kolego winksmiley.jpg
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.