Chyba při vytváření presenteru podle tutoriálu

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

Hoj, procházím tutoriál a zasekl jsem se u přepisování souboru default.latte. Nakopíroval jsem si kód, který je v tutoriálu ale když se chci podívat co to vypíše tak mě to vyhodí hlášku: „PDOException – No reference found for $task->user“. Když v souboru ale smažu řádek <td>{$task->user->name}</td> tak to jde. Dočetl jsem se něco o cizích klíčích v databázi, ale koukal jsem do ni a měli by tam být. Poradíte prosím,kde by mohla být chyba?

ViPEr*CZ*
Člen | 822
+
0
-

Právě v té databázi. Zkuste poslat víc informací jak jste danou DB dělal … a případně někde dumpnout, aby se dalo podívat na SQL co tam vůbec máte.

xciza
Člen | 194
+
0
-

Databáze je tvořeno příkazem SQL z tutoriálu zde na stránkách čili:

CREATE TABLE `task` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `text` varchar(100) NOT NULL,
  `created` datetime NOT NULL,
  `done` tinyint(1) unsigned NOT NULL DEFAULT 0,
  `user_id` int(10) unsigned NOT NULL,
  `tasklist_id` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `order` (`tasklist_id`,`done`,`created`),
  INDEX `fk_user` (`user_id`),
  CONSTRAINT `fk_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`),
  CONSTRAINT `fk_tasklist` FOREIGN KEY (`tasklist_id`) REFERENCES `tasklist` (`id`)
);


CREATE TABLE `tasklist` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
);


CREATE TABLE `user` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(20) NOT NULL,
  `password` char(128) NOT NULL,
  `name` varchar(30) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`)
);
tesil
Člen | 1
+
0
-

Dobrý den, mám stejný problém. Zkouším to na localhostu, používám balík XAMPP pro Apache a MySQL. Databázi jsem vytvořil následovně. Stáhnul jsem soubory quickstart.mysql.sql a data.mysql.sql. Otevřel adminer na localhost/quickstart/www/adminer, kde jsem provedl SQL příkazy nahráním stažených souborů. Stejná chyba No reference found for $task->user na řádku <td><?php echo Nette\Templating\Helpers::escapeHtml($task->user->name, ENT_NOQUOTES) ?></td>. Jako kolega, tak i já po vymazání řádku <td>{$task->user->name}</td> nemám problém. Problém s fk_key se nabízí, ale jak na něj?

EDIT: V PHPMyAdminoj jsem si nastavil v parametrech tabulek Uložiště na typ InnoDB. Poté tabulka task-Struktura-zobrazit relace a růčo nastavil pro sloupec user_id FOREIGN KEY na database.user.id (database je jméno mojí databáze). Je to ruční nastavení, ale funguje to.

Editoval tesil (21. 2. 2012 22:53)

Jan Endel
Člen | 1016
+
0
-

Ano, protože jeden z nejpoužívanějších úložišt MyISAM neumí cizí klíče (a ani transakce).

Editoval pilec (21. 2. 2012 23:12)

22
Člen | 1478
+
0
-

a kdo to ještě používá? :-)

xciza
Člen | 194
+
0
-

tesil napsal(a):

Dobrý den, mám stejný problém. Zkouším to na localhostu, používám balík XAMPP pro Apache a MySQL. Databázi jsem vytvořil následovně. Stáhnul jsem soubory quickstart.mysql.sql a data.mysql.sql. Otevřel adminer na localhost/quickstart/www/adminer, kde jsem provedl SQL příkazy nahráním stažených souborů. Stejná chyba No reference found for $task->user na řádku <td><?php echo Nette\Templating\Helpers::escapeHtml($task->user->name, ENT_NOQUOTES) ?></td>. Jako kolega, tak i já po vymazání řádku <td>{$task->user->name}</td> nemám problém. Problém s fk_key se nabízí, ale jak na něj?

EDIT: V PHPMyAdminoj jsem si nastavil v parametrech tabulek Uložiště na typ InnoDB. Poté tabulka task-Struktura-zobrazit relace a růčo nastavil pro sloupec user_id FOREIGN KEY na database.user.id (database je jméno mojí databáze). Je to ruční nastavení, ale funguje to.

Jak jsi prosim tě změnil ten typ úložiště? Jsem v PHPAdminoj ve své databázi a vidím její strukturu, kde u jednotlivých tabulek je úložiště MyISAM. Ale nevím jak ho změnit…

Editoval xciza (22. 2. 2012 10:38)

voda
Člen | 561
+
0
-

Nejjednodušší je ALTER TABLE nazev_tabulky ENGINE InnoDB;.

xciza
Člen | 194
+
0
-

Díky, povedlo se, ale hned další chyba: PDOException-No reference found for $tasklist->related(task). Co s tím? zase cizí klíče?
Ten tutoriál by chtěl poupravovat…

EDIT: Byl to taky cizí klíč ;)

Editoval xciza (22. 2. 2012 12:15)

xciza
Člen | 194
+
0
-

Tak jsem úspěšně dokončil QuickStart, ale měl bych ještě jeden dotaz. V tutoriálu u přihlšování uživatelů se řeší také změna hesla uživatelů – v aplikaci ale tuto možnost nikde nevidím… V tutoriálu něco chybí?? Co tam musím dodělat?

Michal Majer
Člen | 8
+
0
-

@xciza Asi už jsi na to přišel, ale sám jsem to teď řešil, tak snad někomu pomůžu, když popíšu jak vyřešit problém s typem té databáze.

Aby se databáze automaticky vytvořila v InnoDB a tudíž fungovali relace, musí se upravit soubor my.ini (u Wampu ho se naléza zde: wamp\bin\mysql\mysql5.1.53)

Úplně na konec pod [mysqld] se musí připsat default-storage-engine=InnoDB

Pak jakmile se vytvoří databáze, musí se ty tabulky vkládat popořadě tak, aby šly nejdříve ty bez cizích klíčů, tj. nejdříve user a tasklist a teprve pak task.

Doufám že to někomu ušetří čas ;-)

tami
Člen | 1
+
0
-

„PDOException – No reference found for $task->user“.
Tak s touto hlaskou jsem se potykala dva dny…
Nejdriv jsem zjistila, ze mi chybi foreign keys, tak jsem je nastavila prikazy:

ALTER TABLE task ADD CONSTRAINT fk_user FOREIGN KEY (user_id) references user(id);
ALTER TABLE task ADD CONSTRAINT fk_tasklist FOREIGN KEY (tasklist_id) references tasklist(id);
ale nepomohlo to. Pak jsem si vsimla, ze to mam asi spatne nastavene uloziste, tak jsem ho zmenila na InnoDB a porad to nechodilo. Nakonec mi pomohl prispevek vyse od tesil a nastavila jsem ty klice rucne a konecne to chodi…!! Nemuzete mi nekdo rict, proc pomohlo az to rucni nastaveni? V cem jsem mela chybu, proc se neprovedly ty prikazy na zmenu klicu, co tady uvadim? Dekuju.

Editoval tami (29. 3. 2012 13:42)

ja__no
Člen | 2
+
0
-

stiahol som si https://github.com/…03_presenter
aplikacia funguje zcasti.
a sice po kliknuti na menu napr na: Projekt A. P s url: QuickStartPresenter/www/task/default/1
tak mi vyhodi chubu: PDOException, No reference found for $tasklist->related(task)
line 33: $this->template->tasks = $this->taskList->related(‚task‘)->order(‚created‘);
.. testujem to na xamp, osx, musel som zmenit foreign key a uloziste na imnnodb
viete poradit, nasmerovat?dakujem

ja__no
Člen | 2
+
0
-

problem vyrieseny: mal som zle zadane Foreign keys, ma byt:
user_id user(id)
tasklist_id tasklist(id)

klay
Člen | 1
+
0
-

Vytvořte tabulky tímto SQL scriptem

SET FOREIGN_KEY_CHECKS=0;

CREATE TABLE `task` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `text` varchar(100) NOT NULL,
  `created` datetime NOT NULL,
  `done` tinyint(1) unsigned NOT NULL DEFAULT 0,
  `user_id` int(10) unsigned NOT NULL,
  `tasklist_id` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `order` (`tasklist_id`,`done`,`created`),
  INDEX `fk_user` (`user_id`),
  CONSTRAINT `fk_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`),
  CONSTRAINT `fk_tasklist` FOREIGN KEY (`tasklist_id`) REFERENCES `tasklist` (`id`)
) ENGINE=InnoDB;


CREATE TABLE `tasklist` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;


CREATE TABLE `user` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(20) NOT NULL,
  `password` char(128) NOT NULL,
  `name` varchar(30) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB;

SET FOREIGN_KEY_CHECKS=1;