Trying to get property of non-object v template

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
attika8
Člen | 23
+
0
-

Dobrý den,

narazil som na mensi problem. Mam zakladnu kostru aplikacie a pri vypise jednotlivych dat mi v template vyhadzuje chybu : Trying to get property of non-object. Je mi jasne ze chyba je v tom ze mi funkcia nevracia objekt, ale neviem sa dostat k tomu aby to objekt bol.

Takto vyzera model pri ktorom volam metodu getAll(), ktora mi vrati info o knihe.

<?php
class AdminFacade extends Nette\Object
    {
        private $database;


        public function __construct(Nette\Database\Connection $database)
        {
            $this->database = $database;

        }

        function getAll()
        {
            return $this->database->table('book');
            // return $this->database->query('SELECT * FROM book'); tiez nefunguje

        }
?>

V presenteri potom v metode renderDefault poslem do templatu premennu $books

<?php
class AdminPresenter extends BasePresenter
  {
      private $AdminFacade;
      private $books;


      public function __construct(Model\AdminFacade $AdminFacade)
       {
           $this->AdminFacade = $AdminFacade;
       }
        function startup()
       {
           parent::startup();
       }
       public function renderDefault()
       {
          $this->template->books = $this->AdminFacade->getAll();
          // dump($books);
       }
?>

A nakoniec pri vypise sa snazim dostat jazyk knihy ktory je ulozeny v entite language(id_language,name) a language je cudzi kluc do tabulky book.

<table>
<tr n:foreach="$books as $book">

<td>{$book->name}</td>
<td>{$book->language->name}</td> // tu vyhodi chybu , Trying to get property of non-object
<td>{$book->language} // takto to funguje ale dostanem iba id_language, co pri vypise knih nie je dostacujuce
</tr>
</table>

Uvedomujem si ze tato chyba sa tu uz vyskytuje ale bohuzial odpovede mi nepomohli v tomto pripade. Dakujem za kazde rady.

Editoval attika8 (1. 3. 2013 2:44)

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Zkus nejprve přepsat předání závislostí presenteru na inject. Teď si přepisuješ konstruktor presenteru, což není dobře.

public function injectAdminFacade(Model\AdminFacade $AdminFacade)
{
	$this->AdminFacade = $AdminFacade;
}
attika8
Člen | 23
+
0
-

Vdaka, ale problem pretrvava :-/

Šaman
Člen | 2666
+
0
-

Pošli dump databáze (nebo alespoň té části které se to týká). Od boku bych střelil na chybějící primární klíč.

castamir
Člen | 629
+
0
-

A co tohle?

$book->ref("language")->name
petr.pavel
Člen | 535
+
0
-

Mrkni do debug panelu na dotazy, které to posílá do databáze. Jestli se to ptá dobře a jestli to fakt něco najde.

attika8
Člen | 23
+
0
-

Dakujem castamir. Toto moj problem vyriesilo a vypisal som name.

$book->ref("language")->name

@Šaman – prepac ze som nedodal dump.sql , primarne kluce som mal nastavene (aspon mam taky pocit) spravne.

@petr.pavel – dotaz vracal spravne query, len som sa nevedel dostat k navaznostiam.

Dakujem za vase rady.