konto usunięte

Temat: Nie zwraca wyniku...

Witam,
dopiero uczę się Zenda więc proszę o wyrozumiałość.
Mój problem polega na tym że po wykonaniu zapytania SQL (mającego na celu wyświetlenie nazwy klubu z innej tabeli) choć samo zapytanie jest wykonane poprawnie, wynik nie pojawia się w odpowiednim miejscu widoku.

Tutaj zamieszczam odpowiednią funkcję kontrollera:

public function showAction()
{
$id = $this->getRequest()->getParam('id');
$Pilkarz = new Application_Model_DbTable_Pilkarz();
$obj = $Pilkarz->find($id)->current();
if(!$obj)
{
throw new Zend_Controller_Action_Exception('Błędny adres!',404);
}
$this->view->object = $obj;

$Klub = new Application_Model_DbTable_Klub();
$query = 'SELECT nazwa FROM klub NATURAL JOIN pilkarz WHERE pilkarz_id = '.intval($id);
$this->view->kluby = $Klub->fetchRow($query);
}


Odpowiedni fragment widoku

<table border="2">

<th colspan="3"><?php echo $this->object['imie'] ?></th>
<tr><th colspan="3"><?php echo $this->object['nazwisko'] ?></th></tr>
<tr>
<td rowspan="7">obrazek</td>
<td>Data urodzenia:</td>
<td><?php echo $this->object['dataur'] ?></td></tr>
<td>Pozycja</td>
<td><?php echo $this->object['pozycja'] ?></td></tr>
<td>Klub</td>
<td><?php echo $this->kluby['nazwa'] ?></td></tr>
<td>Narodowosc</td>
<td><?php echo $this->object['kraj_id'] ?></td></tr>
<td>Wzrost</td>
<td><?php echo $this->object['wzrost'] ?></td></tr>
<td>Waga</td>
<td><?php echo $this->object['waga'] ?></td></tr>
<td>Dodano do Bazy</td>
<td><?php echo $this->object['dodano'] ?></td>
</tr>
</table>


Przejrzałem już cały internet, przejrzałem całą książkę, którą się sugeruję (autorstwa W.Gajdy) i wciąż nie wiem co jest nie tak. Proszę o pomoc
Arkadiusz Burszczan

Arkadiusz Burszczan Programista Java

Temat: Nie zwraca wyniku...

Nie bardzo wiem o które CI zapytanie chodzi, ale z treści wnioskuję, że to drugie, czyli $this->view->kluby.
Rozumiem że samo zapytania wykonuje się poprawnie i zwraca Ci rekord??
To może problem polega na tym, że fetchRow zwraca wartości w postaci obiektu, a nie array'a.
Możesz sobie sprawdzić np tak:

$this->view->kluby = $Klub->fetchRow($query)->toArray();


Ale nie jest to dobre rozwiązanie, bo jak zapytanie zwróci 0 wyników, to toArray() krzyknie error, więc trzeba się przed tym zabezpieczyć robią if'a.
Ale możesz sobie sprawdzić czy to CI pomoże.Arkadiusz Burszczan edytował(a) ten post dnia 03.04.13 o godzinie 08:42

konto usunięte

Temat: Nie zwraca wyniku...

Tak, chodzi mi właśnie o zapytanie $this->view->kluby itd.

Zapytanie sql które oznaczyłem zmienną $query w phpmyadmin wykonuje się poprawnie i zwraca nazwę zespołu.

Bo cały problem polega właśnie na tym by system zamiast id klubu w którym gra zawodnik którego dane przeglądamy, wyświetlił nazwę tego zespołu. Dlatego zastosowałem natural join ponieważ w tabeli z danymi zawodników jest przechowywany klucz obcy klub_id, a w tabeli z nazwami klubów poza kluczem głównym jest tylko nazwa zespołu

konto usunięte

Temat: Nie zwraca wyniku...

i niestety Arku miałeś rację.
Zend wywala mi błąd po przekazaniu wyniku do tablicy.
Próbowałem również zastosować _toString ale też nie zadziałało
Arkadiusz Burszczan

Arkadiusz Burszczan Programista Java

Temat: Nie zwraca wyniku...

Jeśli wywala błąd, to znaczy, że zapytanie zwraca pusty rekord, także niestety coś zapytaniem jest nie halo.

konto usunięte

Temat: Nie zwraca wyniku...

Zdebuguj sobie zapytanie przed zrobieniem fetcha

echo $query;
die();

jak juz SQL bedzie ok to zrób coś takiego:

$result = $Klub->fetchRow($query);
if($result) {
$this->view->costam = $result->toArray();
}

Pozdrawiam.

konto usunięte

Temat: Nie zwraca wyniku...

Dziękuję wszystkim za pomoc.
Niestety nic nie pomogło więc pozostało mi przebudowanie kontrollera co też zrobiłem i już wszystko działa.

Pozdrawiam

konto usunięte

Temat: Nie zwraca wyniku...

Dziwne, że nikt nie zwrócił uwagi, że cała "magia" związana z DB powinna się znaleźć w MODELU...

Następna dyskusja:

Blokowanie dostepu katalogu...




Wyślij zaproszenie do