PqSql – Class ‚Nette\Database\Drivers\NotImplementedException‘ not found
- janycta
- Člen | 12
Ahoj,
snažím se rozchodit ukázkový příklad quickstart na databází postgres,
ale pokaždé mi to hodí chybu:
Class ‚Nette\Database\Drivers\NotImplementedException‘ not found
a zastaví se to na funkci:
public function getForeignKeys($table)
{
throw new NotImplementedException;
}
Nějaké nápady, co s tím? Díky moc. ;-)
- da11niel
- Člen | 2
Zkus tam dat tohle :)
public function getForeignKeys($table)
{
$keys = array();
$query = "
SELECT
tc.constraint_name, tc.table_name, kcu.column_name,
ccu.table_name AS foreign_table_name,
ccu.column_name AS foreign_column_name
FROM
information_schema.table_constraints AS tc
JOIN information_schema.key_column_usage AS kcu ON tc.constraint_name = kcu.constraint_name
JOIN information_schema.constraint_column_usage AS ccu ON ccu.constraint_name = tc.constraint_name
WHERE constraint_type = 'FOREIGN KEY' AND tc.table_name=" . $this->connection->quote($table);
foreach($this->connection->query($query) as $id => $row) {
$keys[$id]['name'] = $row['foreign_column_name']; // foreign key name
$keys[$id]['local'] = $row['column_name']; // local columns
$keys[$id]['table'] = $row['foreign_table_name']; // referenced table
$keys[$id]['foreign'] = $row['foreign_column_name']; // referenced columns
}
return array_values($keys);
}
- janycta
- Člen | 12
No zkoušela jsem i přímo stáhnout již hotový příklad: https://github.com/…03_presenter ze stránky https://doc.nette.org/cs/quickstart, kde by to mělo být správně. Změnila jsem pouze v config.neon informace o databázi a přidala jsem podle Tvé rady tělo funkce do souboru libs\Nette\Database\Drivers\PgSqlDriver.php
Zřejmě se mu nelíbí toto:
<?php
{foreach $tasks as $task}
<tr>
<td>{$task->created|date:'j. n. Y'}</td>
<td>{$task->text}</td>
<td>{$task->user->name}</td>
</tr>
{/foreach}
?>
- hatack
- Člen | 2
Můžeš sem poslat schéma té Tvojí databáze? Já dostával podobné
chyby, když jsem neměl správně vytvořené primární klíče v tabulkách.
Nezkoušel jsem quickstart, měl jsem už hotovou starší aplikaci, kterou
předělávám do Nette, udělal jsem něco jako DROP INDEX idx
a
pak ALTER TABLE user ADD primary key (id)
a bylo to už funkční,
nic jiného jsem upravovat nemusel.
- Milo
- Nette Core | 1283
Opravy pro PgSqlDriver mám rozdělané, je tam víc bugů. Tenhle týden to snad stihnu dodělat.
Zkus si zatím stáhnout tento PgSqlDriver a pokud Ti budou vyskakovat chyby, případně i Selection. Na Quickstart by to mělo stačit, do produkce ale opatrně, je to dev.
- janycta
- Člen | 12
Tak nevím nevím, pořád se mi nějak nedaří. Zkoušela jsem zkopírovat nový PgSqldriver i Selection, ale stále se objevuje tato chyba:
PDOException
No reference found for $task->user
Schéma databáze je zde:
CREATE TABLE task
(
id serial NOT NULL,
"text" text NOT NULL,
created timestamp without time zone NOT NULL,
done boolean NOT NULL DEFAULT false,
user_id integer NOT NULL,
tasklist_id integer NOT NULL,
CONSTRAINT task_pkey PRIMARY KEY (id)
);
CREATE TABLE tasklist
(
id serial NOT NULL,
title text NOT NULL,
CONSTRAINT tasklist_pkey PRIMARY KEY (id)
);
CREATE TABLE "user"
(
id serial NOT NULL,
username text NOT NULL,
"password" character(128) NOT NULL,
"name" text NOT NULL,
CONSTRAINT user_pkey PRIMARY KEY (id),
CONSTRAINT user_username_key UNIQUE (username)
);
- Milo
- Nette Core | 1283
hatack napsal(a):
A nechybí tam ta reference?
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);
Tak tak, chybí Ti tam cizí klíče mezi tabulkami.