SQL v commandu spuštěnýho přes terminál

marty1452
Člen | 10
+
0
-

Dobrý den,

vytvořil jsem skript, který volám přes terminál. Vlastně je to classa, která dědí od Symfony\Component\Console\Command\Command a měla by přidat záznamy do databáze.

Používám postgres a doctrinu.

Když command spustím napíše mi to syntax error v SQL, který to vytvoří.

 Syntax error: 7 ERROR:  syntax error at or near "default"
 LINE 1: INSERT INTO roles (name, default, id) VALUES ($1, $2, $3)
                                   ^
INSERT INTO roles (name, default, id) VALUES (?, ?, ?)' with params ["U\u017eivatel", 1, "e2e84463-48dd-4a86-8f8f-4f83103e54b7"]

Zde je část kódu, která vyhazuje tento error:

$role = new Role($roleName, $this->default);
$this->roles->add($role);

Podle mě to vytváří SQL pro MYSQL a ne pro postgresql.

Nevíte někdo co s tím?

Děkuji za odpovědi.

Marek Bartoš
Nette Blogger | 1146
+
+1
-

Imho máš stejný problém jako v této issue https://github.com/…/issues/2409

Vývojáři doctrine se bohužel kdysi rozhodli, že ne-escapování názvů sloupců není bug (potenciálně bezpečnostní), ale feature. default je v SQL slovo se speciálním významem a tak se escapovat musí. Řešení najdeš v dokumentaci https://www.doctrine-project.org/…mapping.html#…

Naštěstí ale existuje i nextras/orm, které toto řeší správně

CZechBoY
Člen | 3608
+
0
-

Udajne ve verzi 3 uz by to melo escapovat samo. Jakou verzi doctrine mas?

marty1452
Člen | 10
+
0
-

Vyřešeno podle odpovědi od Marka Bartoše. Bylo to tím, že default je vyhrazené slovo