Nette\Database: ->insert($data) vrací FALSE (Nette 2.3)
- Petr Hudík
- Člen | 49
Ahoj,
po updatu na Nette 2.3 se mi v logu začaly objevovat zvláštní chyby. Obvykle se točí okolo toho, že vložím řádek a následně s výsledkem hned pracuji, například:
$row = $this->database->table('table')->insert([ /* ... */ ]);
$id = $row->id; // vyhotí notice
$object = new MyObj($row); // vyhodí Recoverable Error, protože v constructoru vyžaduje ActiveRow
Problém je v tom, že se mi problém nedaří nasimulovat, pokud stejné akce provedu já, vše proběhne v pořádku. Problém zřejmě nenastane pokaždé. I když nastane zmíněná chyba, tak se do databáze řádek uloží.
Řešením by samozřejmě byla podmínka if (!$row)
, která by
problém odhalila a bylo by možné řádek z db vytáhnout, ale proč
nefunguje zmíněná konstrukce? mám se jí raději vyhnout? nastala zde
nějaká změna, nebo byla náhoda, že ve v Nette 2.2 to fungovalo
(případně nefungovalo a v logu jsem to přehlédl).
- pata.kusik111
- Člen | 78
Řeším stejný problém při práci s hotovou komponentou stáhnutou
composerem. Má naprosto stejnou konstrukci.
Zabije se na řádku
$id = $row->id;
S notice „Trying to get property of non-object“
Dle laděnky hodnota $row
je 1
a ne FALSE
jako v tvém případě.
Jedná se o Nette 2,3,1. Podle dokumentace
by se to mělo stát pouze v případě, že tabulka nemá pimary key.
Nicméně tabulka primary key má.
UPDATE: Vyřešeno vymazáním cache databázové struktury. Zdá se, že si nette špatně zapamatovalo, že tabulka nemá primary key.
Editoval pata.kusik111 (29. 4. 2015 15:49)