Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] propel, wyciagniecie danych z tabeli
Forum PHP.pl > Forum > PHP > Frameworki
jarre1987
Czesc.

Mam glupi problem, z ktorym sobie nie moge poradzic ;/ . mam takie tabele:

CODE
Tp_Hotel:
id:
nazwa:
miasto:
opis:
wojewodztwo: ForeignTable: Tp_Wojewodztwo, foreignReference: Id

Tp_Wojewodztwo:
id: primaryKey
wojewodztwo: char 255



mam juz wyciagniete dane z wybranego Hotelu, oprocz wojewodztwa. Nie mam pojecia jak to zadeklarowac, zapisac w Criterii...Nie mam pomyslu ;/ Chodzi o to, ze dla wybranego hotelu ma zwrocic wojewodztwo w ktorym sie znajduje..Pomoze mi ktos? Chetnie napisze kod akcji i widoku jezeli bedzie potrzebny...
bazyliszek83
Napisz kod widoku i akcji a ja podam ci funkcje wyciągającą te dane.
jarre1987
Cytat(bazyliszek83 @ 19.03.2009, 11:46:53 ) *
Napisz kod widoku i akcji a ja podam ci funkcje wyciągającą te dane.



kod akcji:
CODE
public function executeShowHotel(sfWebRequest $request)

$this->show_hotel= TpHotelPeer::RetrieveByPk($request->getParameter('id'));

$this->region = TpWojewodztwoPeer::getRegionFromHotel();




templatete:
CODE

<?php echo $show_hotel->getName() ?>
<?php echo $show_hotel->getCity() ?>
<?php echo $show_hotel->getRegion() ?>
bazyliszek83
Genaralnie musisz utworzyć joina.
Robi się to mniej więcej tak :
  1. <?php
  2. // lib/model/TpHotelPeer.php
  3. class TpHotelPeer extends BaseTpHotelPeer
  4. {
  5.  static public function getWithProvince($id)
  6.  {
  7.    $criteria = new Criteria();
  8.    $criteria->addJoin(self::WOJEWODZTWO, TpWojewodztwoPeer::ID);
  9.    $criteria->add(self::ID, $id);
  10.  
  11.    return self::doSelect($criteria);
  12.  }
  13. }
  14. ?>


No a w akcji robisz tak:
  1. <?php
  2. public function executeShowHotel(sfWebRequest $request) {
  3.  
  4. $this->show_hotel= TpHotelPeer::getWithProvince($request->getParameter('id'));
  5.  
  6. $this->region = TpWojewodztwoPeer::getRegionFromHotel();
  7. }
  8. ?>


Coś w tym gusicie:)
jarre1987
Mam tak:

CODE
public function executeShowHotel(sfWebRequest $request)
{
$this->show_hotel = TpHotelPeer::RetrieveByPk($request->getParameter('id'));
$this->region= TpHotelPeer::getWithProvince($id = $request->getParameter('id'));
}


a we widoku:

CODE

<?php echo $show_hotel->getName() ?>
<?php echo $show_hotel->getCity() ?>
<?php echo $region->getRegion() ?>


i wyskakuje blad:

Call to undefined method sfOutputEscaperArrayDecorator::getRegion()

?

on powinien pobierac numer id regionu z rekordu wybranego hotelu, poprzez wlasnie odwolanie sie do drugiej tabeli, w ktorej po ID tam pobierze nazwe w 'string' regionu(Wojewodztwa)..
Nie wiem czemu tak sie dzieje ;/
destroyerr
Warto byłoby pobawić się propelem i symfony, poczytać troche o nich. Jeśli byś poczytał to wiedziałbyś, że TpHotelPeer::getWithProvince() zwraca tablice. Zresztą sam powinieneś sprawdzić co zwraca ta funkcja po błędzie (Call to undefined method sfOutputEscaperArrayDecorator::getRegion()).

Co do pierwotnego kodu Twojej akcji to widać, że nie masz pojęcia o co chodzi. Kod który podał bazyliszek83 moim zdaniem też się nie nadaje. Ja zrobiłbym tak:
  1. <?php
  2. public function executeShowHotel(sfWebRequest $request)
  3. {
  4.    $this->hotel = TpHotelPeer::retrieveByPk($request->getParameter('id'));
  5.    $this->region = $this->hotel->getRegion();
  6. }
  7. ?>

Ale tak teraz patrzę, że Ty w widoku pobierasz region i tak z hotelu, więc już zgłupiałem.
bazyliszek83
Czekaj, czekaj... bo to teraz troche bez sensu wygląda.

Jeśli chcesz brać to w etapach to nie potrzeba joina:
  1. <?php
  2. $this->show_hotel = TpHotelPeer::RetrieveByPk($request->getParameter('id'));
  3. $this->region= TpWojewodztwoPeer::RetrieveByPk($this->show_hotel->getPrimaryKey());
  4. ?>


Nie wiem co oznacza metoda getRegion() skoro baze podałeś w polskich nazwach. Ale zakładam że to potem ręcznie przebudowałeś.

Teraz powinno działać to co pokazaleś w widoku.
jarre1987
Cytat(bazyliszek83 @ 19.03.2009, 15:24:02 ) *
Czekaj, czekaj... bo to teraz troche bez sensu wygląda.

Jeśli chcesz brać to w etapach to nie potrzeba joina:
  1. <?php
  2. $this->show_hotel = TpHotelPeer::RetrieveByPk($request->getParameter('id'));
  3. $this->region= TpWojewodztwoPeer::RetrieveByPk($this->show_hotel->getPrimaryKey());
  4. ?>


Nie wiem co oznacza metoda getRegion() skoro baze podałeś w polskich nazwach. Ale zakładam że to potem ręcznie przebudowałeś.

Teraz powinno działać to co pokazaleś w widoku.


Przebudowalem linijke z:
CODE
$this->region= TpWojewodztwoPeer::RetrieveByPk($this->show_hotel->getPrimaryKey());


na:
CODE
$this->region= TpWojewodztwoPeer::RetrieveByPk($this->show_hotel->getRegionId());


i nareszcie działa smile.gif)

Dzieki wielkie za pomoc!! Swoja droga chyba jeszcze dluuuga droga nauki przede mna...;/

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