Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Kohana]Pobranie wyników w modelu, wyświetlenie w widoku
Forum PHP.pl > Forum > PHP > Frameworki
Trobin
Zdaje się, że mój problem nie jest skompikowany i trudny do rozwiązania, ale napotkałem problem przy rozdzieleniu modelu (pobranie danych z bazy) z widokiem (wyświetlenie tych danych). Otóż w klasie Klasa_Model mam metodę show();. Ta metoda pobiera dane z bazy danych.
  1. <?php
  2. function pokaz(){
  3. $db = new Database();
  4. $query = 'SELECT number FROM kontakty';
  5. $result = $this->db->query($query);
  6. return $result;
  7. }
  8. ?>

Zrobiłem to w ten sposób, ale nijak mi to nie pomaga. Oto plik widoku (jedynie część "wyświetlająca" rzeczone dane):
  1. <?php
  2. foreach ($result as $row):
  3. {
  4. echo 'Nazwa użytkownika: ' . $row->number . '<br />';
  5. echo '<hr />';
  6. }
  7. endforeach
  8. ?>

No i jak wchodzę na stronę to Kohana wywala mi błąd:
Cytat
Undefined variable: result

Czuję, że rozwiązanie jest niezbyt trudne i skomplikowane, ale nie mogę na nie wpaść...
PawelC
Nigdzie nie zauważyłem mysql_fetch_array, tylko samo zapytanie do bazy mysql_query.
Zobacz tak:
  1. <?php
  2. function pokaz(){
  3. $db = new Database();
  4. $query = 'SELECT number FROM kontakty';
  5. $result = $this->db->query($query);
  6. $wynik = mysql_fetch_array($result);
  7. return $wynik;
  8. }
  9. ?>

I drugi kod:
  1. <?php
  2. foreach ($wynik as $row):
  3. {
  4. echo 'Nazwa użytkownika: ' . $row->number . '<br />';
  5. echo '<hr />';
  6. }
  7. endforeach
  8. ?>
Trobin
Na stronie fw Kohana dokopałem się do czegoś takiego:
  1. <?php
  2. $query = $this->db->query("SELECT `first_name`, `last_name`, `age` FROM `users`");
  3.  
  4. foreach ($query->result_array(FALSE) as $row)
  5. {
  6.  echo $row['first_name'];
  7.  echo $row['last_name'];
  8.  echo $row['age'];
  9. }
  10. ?>

No i wszystko by grało, ale twórcy dokumentacji chyba sami zapomnieli, że zaimpleementowali MVC w swoim projekcie, bo przedstawili tylko wersje "pobierz - wyświetl". Próbowałem już różnych return, globali i innych cudów na kiju i nie działa...
PawelC
Ale pobierasz z bazy tylko jeden rekord czy kilka?
nrm
model:
  1. <?php
  2. public function show(){
  3. $sql = $this->db->select()->from('kontakty')->get();
  4. return $sql->current();
  5. }
  6. ?>


kontroler:
  1. <?php
  2. $klasa = new Klasa_Model;
  3. $number = $klasa->show();
  4. $widok->set('result',$number);
  5. ?>


widok:
  1. <?php foreach($result as $r): ?>
  2. <?=$r->number; ?>
  3. <?php endforeach; ?>


w skrócie. no i w modelu NIE musisz ponownie ładować DB, jest odpalana defaultowo wyżej.
Trobin
Teraz wygląda to tak:
model
  1. <?php
  2. function pokaz(){
  3. $sql = $this->db->select()->from('kontakty')->get();
  4. return $sql->current();
  5. }
  6. ?>

kontroler
  1. <?php
  2. public function pokaz(){
  3. $widok=new View('pokaz');
  4. $widok->title='Kontakty / pokaz kontakty';
  5. $widok->render(TRUE);
  6.  
  7. $pokaz=new Kontakt_Model();
  8. $number=$pokaz->pokaz();
  9. $widok->set('result', $number);
  10. }
  11. ?>

widok
  1. <?php foreach($result as $r): ?>
  2. <?=$r->number; ?>
  3. <?php endforeach; ?>

A błąd ciągle ten sam.
nrm
no stary, podstawy. najpierw dałeś render a potem cos jeszcze chcesz? winksmiley.jpg przywróć logiczną kolejność smile.gif
Trobin
...
no to ja już sobie pójdę biggrin.gif
jednak: z tego co zauważyłem to mój serwer nie trwai zapisów w stylu (wywala mi tylko number; ?>)
  1. <?=$r->number; ?>

więc podmieniłem na
  1. <?php
  2. echo $r->number;
  3. ?>

i wtedy zgłasza się błąd
Cytat
Trying to get property of non-object

Jednak jeżeli wywalę
  1. <?php
  2. echo $result->number;
  3. ?>

poza pętle to wyświetla poprawnie (oczywiście nie wszystko winksmiley.jpg - tylko pierwszy wpis, ale to chyba już tylko kwestia sortowania)
nrm
kłaniają się podstawy dostępu do zmiennych, tablic i obiektów winksmiley.jpg akurat FW nic tu do tego winksmiley.jpg jak pobierasz jeden wiersz (current()) to oczywistym jest, że nie masz czego 'foreachować'. var_dump(), print_r() i kohana::debug() twoim przyjacielem winksmiley.jpg
Trobin
Czyli polecasz przerobić jeszcze raz rozdział "Dostęp do danych w PHP5" winksmiley.jpg . Ok, to lecę czytać smile.gif .

EDIT:
Dobra, pochwalę się winksmiley.jpg widać aż taki głupi nie jestem biggrin.gif
model:
  1. <?php
  2. $result = $this->db->select()->from('kontakty')->get();
  3. return $result;
  4. ?>

kontroler
  1. <?php
  2. $result=$pokaz->pokaz();
  3. $widok->set('result', $result);
  4. ?>

widok
  1. <?php foreach ($result as $r): ?>
  2. <li><?php echo $r->number; ?></li>
  3. <?php endforeach; ?>

Dla potomnych
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.