Problem s vracenim naposled vlozeneho ID
- vosy
- Člen | 532
ahoj
pomoci nette vytvorim novou tabulku:
$tab = 'z'.$idZnacky.'_'.\App\Glb::$TABS['vyrobky'];
if(!$this->MyDb->tableExists($tab))
{
$sql = 'CREATE TABLE IF NOT EXISTS `'.$tab.'` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nazev` varchar(200) COLLATE utf8_czech_ci NOT NULL,
`objCislo` varchar(50) COLLATE utf8_czech_ci NOT NULL,
`herstellerNumber` varchar(50) COLLATE utf8_czech_ci NOT NULL,
`ean` varchar(50) COLLATE utf8_czech_ci NOT NULL,
`origText` text COLLATE utf8_czech_ci NOT NULL,
`transText` text COLLATE utf8_czech_ci NOT NULL,
`url` varchar(200) COLLATE utf8_czech_ci NOT NULL,
`nacteniZakladni` datetime DEFAULT NULL,
`nacteniDetailu` datetime DEFAULT NULL,
`nacteniBTS` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `objCislo` (`objCislo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;';
$this->db->query($sql);
}
nasledne do ni vlozim data:
$sqlVals = array('objCislo'=>$objCislo,
'url'=>$url,
'nacteniZakladni'=>date('Y-m-d H:i:s'));
$r = $this->db->table($tab)
->insert($sqlVals);
a pak bych rad ziskal nove ID
$idVyrobku = $r->id;
toto vraci NULL
ikdyz vymazu temp/cache
Editoval vosy (1. 6. 2015 14:32)
- David Matějka
- Moderator | 6445
A posila se do db nejaky dotaz? Na gh byly nejaky issues, ze se posila s id „0“.. jak se deje u tebe?
- David Matějka
- Moderator | 6445
spatne jsem se vyjadril. Po insertu provadi ndbt jeste jeden dotaz pro vyber aktualne vlozeneho radku. Provadi se? jak vypada?
- vosy
- Člen | 532
vycuc z Queries
time: 0.459
INSERT INTO `z36_vyrobky` (`objCislo`, `url`, `nacteniZakladni`)
VALUES ('722.00.31', 'http://www.domena.cz/article/153', '2015-06-01 16:08:39')
.../app/AdminModule/models/vyrobky/ZakladniRepository.php:291
rows: 1
------------------------
ERROR
INSERT INTO `z36_vyrobky_skupiny` (`vyrobky_id`, `skupiny_id`)
VALUES (NULL, 1)
.../app/AdminModule/models/vyrobky/ZakladniRepository.php:345
- iguana007
- Člen | 970
A zkoušel sis tu query, kterou tam posíláš spustit přímo v DB? Nevím jak u tebe, ale s tebou uvedeným kodém se mi ten INSERT nevykoná, protože tam nepředáváš některé hodnoty sloupců, které máš nastavené na NOT NULL + nemají nastavenou žádnou defaultní hodnotu:
INSERT INTO `z36_vyrobky_skupiny` (`objCislo`, `url`, `nacteniZakladni`) VALUES ('722.00.31', 'http://www.domena.cz/article/153', '2015-06-01 16:08:39')
Error in query (1364): Field 'nazev' doesn't have a default value
- vosy
- Člen | 532
spusteni v DB funguje dobre
Vložen 1 řádek.
ID vloženého řádku: 1 ( dotaz trval 0.0007 sekund )
INSERT INTO `z30_vyrobky` ( `objCislo` , `url` , `nacteniZakladni` )
VALUES (
'722.00.31', 'http://www.domena.cz/article/153', '2015-06-01 16:08:39'
)
navic query vytvoreni tabulky je export primo z DB
- vosy
- Člen | 532
udelal jsem nazkousku
$tab = 'zkouska';
$sql = 'CREATE TABLE IF NOT EXISTS `'.$tab.'` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`objCislo` varchar(50) COLLATE utf8_czech_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `objCislo` (`objCislo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;';
$this->db->query($sql);
$r = $this->db->table($tab)
->insert(array('objCislo'=>'1234'));
var_dump($r->id);
$r = $this->db->table($tab)
->insert(array('objCislo'=>'5678'));
var_dump($r->id);
vysledek
NULL NULL
data v tabulce jsou ulozeny
a to i v pripade kdy vymazu cache
Editoval vosy (2. 6. 2015 21:35)
- vosy
- Člen | 532
tak to nechapu:
Table ‚zkouska‘ does not have a primary key
pritom
10: $sql = 'CREATE TABLE IF NOT EXISTS `'.$tab.'` (
11: `id` int(11) NOT NULL AUTO_INCREMENT,
12: `objCislo` varchar(50) COLLATE utf8_czech_ci NOT NULL,
13: PRIMARY KEY (`id`),
14: UNIQUE KEY `objCislo` (`objCislo`)
15: ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;';
16:
17: $this->db->query($sql);
18:
19: var_dump($this->db->table($tab)->getPrimary());
- Unlink
- Člen | 298
No presne ako som predpokladal, to insert ti vráti 1 (lebo ten insert vložil jeden riadok) namiesto IRow a pre to nieje možné volať to $r->id a robí to preto, lebo nevie nájsť primárny kľúč.
Ale čím to je neviem, možno preto že tú tabuľku vytváraš dynamicky ale s tým ti musí poradiť už niekto skúsenejší.
Editoval Unlink (2. 6. 2015 22:27)
- David Matějka
- Moderator | 6445
@vosy prijde mi to jako hloupost, proc si proste to id znacky nedas do nejakyho sloupecku?
- Pavel Kravčík
- Člen | 1196
Takhle ta tabulka moc významu nemá, kromě toho, že sis přidělal pár hodin práce navíc. :) Zkusil bych vytvoření té tabulky promazat cache automaticky, třeba to ten PK udělá. Občas mi to dělalo v práci s YetORM a stačilo smazat tu cache a vše bylo v pořádku.
- Pavel Kravčík
- Člen | 1196
Použij ten finder a můžeš zkusit smazat všechno, co má database v sobě. Ale rozhodně to není dobré řešení! :)