Nette database insert nevrací ActiveRow
- HonzaN
- Člen | 66
Ahoj,
používám Nette 2.3.0 (released on 2015–02–25) a mám problém se zjištěním ID posledního vloženého řádku. Pro zjednodušení jsem skript redukoval na nutné minimum:
$row = $this->database->table(‚objednavky‘)->insert(array());
Dotaz se vykoná, řádek se v databází objeví, ale proměnná $row obsahuje místo ActiveRow jen hodnotu 1.
Poradíte mi někdo co dělám špatně ?
- jvit
- Člen | 2
je to napsané v komentáři té metody
<?php
/**
* Inserts row in a table.
* @param array|\Traversable|Selection array($column => $value)|\Traversable|Selection for INSERT ... SELECT
* @return IRow|int|bool Returns IRow or number of affected rows for Selection or table without primary key
*/
public function insert($data)
?>
nejspíš ta tvá tabulka nemá primární klíč
- HonzaN
- Člen | 66
Ahoj,
znovu jsem narazil na ten samý problém:
$new = $this->db->table($params[‚table‘])->insert($values);
return $new->id;
vrátí prázdné $new a chybu Notice: Trying to get property of non-object
dotaz (z tracy)
INSERT INTO titul_top
(titul_id
,
poradi
)
VALUES (33694, ‚10‘)
se vykoná a záznam v db vznikne.
Struktura tabulky:
CREATE TABLE titul_top
(
id
int(11) unsigned NOT NULL AUTO_INCREMENT,
titul_id
int(4) unsigned zerofill DEFAULT NULL,
poradi
int(11) DEFAULT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- HonzaN
- Člen | 66
Ještě doplním – tabulku jsem smazal, vytvořil ji znovu zkopírováním jiné kde se chyba nevyskytovala a upravil strukturu. Teď dostávám zpátky očekávaný Active Row.
Struktura „nové“ tabulky:
CREATE TABLE titul_top
(
id
int(11) unsigned NOT NULL AUTO_INCREMENT,
titul_id
int(4) unsigned zerofill DEFAULT NULL,
poradi
int(11) DEFAULT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Cache jsem mazal v obou případech.
- HonzaN
- Člen | 66
O mnoho tabulek dále…vždy pomohlo smazání cache. Původní situaci se mi už nepodařilo nasimulovat.
Verze MySQL:
innodb_version 5.6.14
protocol_version 10
slave_type_conversions
version 5.6.14
version_comment MySQL Community Server (GPL)
version_compile_machine i386
version_compile_os osx10.7
- n.u.r.v.
- Člen | 485
Ahoj, tak teď jsem se s tím setkal taky… Bohužel tentokrát smazání cache ani smazání a znovu naimportování DB tabulky nepomohlo – stále to vracelo int 1. Ale když jsem si dal vypsat ->getInsertId(); tak mi to vrátilo správně poslední vložené ID…
Tabulka má opravdu PK auto increment:
CREATE TABLE `questions_answers` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`QUESTION_CS` text COLLATE utf8_czech_ci NOT NULL,m
...
...
PRIMARY KEY (`ID`),
KEY `IX_questions_answers_TEST_DEF_ID_TEST_SECTION_ID` (`TEST_DEFINITION_ID`,`TEST_SECTION_ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;