Tvoříme první aplikaci → Table ‚posts‘ does not exist

andrewthesloth
Člen | 3
+
0
-

Zdravím,

rozhodl jsem se, že se začnu učit v Nette. Jelikož je to mé první setkání s PHP frameworkem, řekl jsem si, že nezačnu nikde jinde než u návodu právě od Nette, konkrétně „Píšeme první aplikaci“. Že budu mít problém, se kterým si sám neporadím, hned na počátku, to jsem nečekal. Proto se sem obracím s žádostí o pomoc.

V kapitole „Úvodní stránka“ jsem jel přesně podle návodu, dokonce jsem i proměnné pojmenovával stejně, ale narazil na problém. Abych krátce shrnul, o čem v kapitole jde, účelem je vytvořit MySQL databázi, kterou následně načítat a zobrazovat v latte šabloně.

Konečně k problému. Vytvořil jsem databázi „quickstart“; následně jsem do db vložil table „posts“ a naplnil několika záznamy. Když pak ale chci table načíst, vyhodí mi Nette při načítání stránky chybu "Nette\InvalidArgumentException Table 'posts' does not exist.".

Napadá mě, že se špatně připojuji (autentizuji) k databázi. Jejím přihlašovacím jménem je root a heslo není, což úplně přesně nevím, jak předat neonu. Zkoušel jsem jak password: '', tak i password: .

Budu moc vděčný za jakoukoliv pomoc, snažil jsem se to vygooglit, jak jen jsem dokázal – neúspěšně. Přikládám kód.

classa v HomepagePresenter.php

class HomepagePresenter extends Nette\Application\UI\Presenter
{
	private $database;

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


	public function renderDefault()
	{
    $this->template->posts = $this->database->table('posts') <=== řádek se zvýrazněnou chybou
        ->order('created_at DESC')
        ->limit(5);
	}
}

přidaná část „database“ v config.neon

database:
	dsn: 'mysql:host=127.0.0.1;dbname=quickstart'
	user: root
	password:
David Matějka
Moderator | 6445
+
+1
-

ahoj, zkus smazat cache ze slozky /temp

ale dit by se to nemelo a cache by se mela mazat sama. jsi v debug modu? nezapomnel si v bootstrapu ten radek setDebugMode(false)? respektive vidis dole panel s tracy?

rkor
Člen | 62
+
+1
-

Myslím, že v configu chybu nemáš, páč to bys dostal jinou chybu – např: SQLSTATE[HY000] [1045] Access denied for user ‚root‘@'127.0.0.1' (using password: NO)

Tak mrkni na to, co psal @DavidMatějka, případně zkus zkontrolovat, zda nemáš někde překlep

andrewthesloth
Člen | 3
+
0
-

David Matějka napsal(a):

ahoj, zkus smazat cache ze slozky /temp

ale dit by se to nemelo a cache by se mela mazat sama. jsi v debug modu? nezapomnel si v bootstrapu ten radek setDebugMode(false)? respektive vidis dole panel s tracy?

Smazání cache nepomohlo a v debug modu jsem, tracy vidím.

rkor napsal(a):

Myslím, že v configu chybu nemáš, páč to bys dostal jinou chybu – např: SQLSTATE[HY000] [1045] Access denied for user ‚root‘@'127.0.0.1' (using password: NO)

Tak mrkni na to, co psal @DavidMatějka, případně zkus zkontrolovat, zda nemáš někde překlep

Aha, super. Tak alespoň to jsem vyloučil. Překlep hledám celý den, pokud tam je, tak jsem slepej.

Začínám být bezradný :(. Ale děkuji za odpovědi.

rkor
Člen | 62
+
+3
-

Ještě mne napadlo. Pokud jsi stáhl zip nebo instaloval přes composer, tak v souboru config.local.neon je

database:
	dsn: 'mysql:host=127.0.0.1;dbname=test'
	user:
	password:

a to má přednost před tím, co je zadáno v config.neon. Tím pádem by se používala DB „test“ a tam tabulka posts asi nebude. Případně někam nahraj projekt nebo napiš mail a můžeme na to mrknout.

andrewthesloth
Člen | 3
+
0
-

rkor napsal(a):

Ještě mne napadlo. Pokud jsi stáhl zip nebo instaloval přes composer, tak v souboru config.local.neon je

database:
	dsn: 'mysql:host=127.0.0.1;dbname=test'
	user:
	password:

a to má přednost před tím, co je zadáno v config.neon. Tím pádem by se používala DB „test“ a tam tabulka posts asi nebude. Případně někam nahraj projekt nebo napiš mail a můžeme na to mrknout.

Nejseš ty frajer? Funguje to, mockrát díky. Nevím, proč mě nenapadlo do toho souboru vůbec nakouknout, třeba ze zvědavosti… Ještě se to tak hezky nabízí… Tak už jenom doufat, že se poučím a budu si hlídat nastavení pro různé přístupy.

Ještě jednou díky – jak tobě, tak Davidovi. Super.

rkor
Člen | 62
+
+2
-

Abych to upřesnil, tak v souboru bootstrap.php je

$configurator->addConfig(__DIR__ . '/config/config.neon');
$configurator->addConfig(__DIR__ . '/config/config.local.neon');

a proto se upřednostní konfigurace z config.local.neon, pokud přepíše některé parametry z config.neon.

V dokumentaci je to popsáno:

Veškerá konfigurace včetně konfigurace databáze je uložena v adresáři /app/config/ v souborech config.neon a config.local.neon. Soubor config.neon obsahuje globální nastavení aplikace a config.local.neon pouze ty parametry, které jsou specifické pro aktuální prostředí (rozdíl mezi vývojovým a produkčním serverem apod.).

Editoval rkor (11. 11. 2017 21:07)