lastInsertId() je 0 při použití DevNullStorage
- kminekmatej
- Generous Backer | 38
Narazil jsem asi na bug v Nette? Doufám že ne a jsem jen blbej :).
V Nette Testeru mám vyplé cachování:
services:
cacheStorage:
class: Nette\Caching\Storages\DevNullStorage
Následně přidám záznam do databáze:
$row = $this->database->table('todo')->insert($create);
var_dump($row);
Dumpne mi to FALSE.
Zjistil jsem že když mám DevNullStorage tak po vložení záznamu do
databáze, Nette DBEx volá SHOW FULL TABLES ve funkcích
Nette\Database\Structure::needStructure()
→
Nette\Database\Structure::loadStructure()
→
Nette\Database\Drivers::getTables()
Po provedení tohoto příkazu pak přímo PDO na lastInsertId()
vrací 0
Sranda je že ten záznam se ve skutečnosti vytvoří. Pouze lastInsertId() selže a proto metoda insert() vrátí FALSE
Editoval kminekmatej (22. 5. 2019 16:04)
- kminekmatej
- Generous Backer | 38
Když mi nikdo neodpověděl, tak si odpovím sám, třeba to někomu
v budoucnu pomůže. Jednalo se o bug v Nette/Database, projevující se při
nevybudování cache:
https://github.com/…ase/pull/217
Opravený v Nette v3. Krom ruční opravy není příliš možnost jak to fixnout – pouze přepsat to přímo ve zdrojáku ve složce vendor (a nedělat composer update/install).
Správné řešení je přejít na Nette 3. Good luck ;)