Výběr řádku tabulky podle vícepoložkového (složeného) primárního klíče
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- buffus
- Člen | 101
Nette Framework 2.0.10, Nette Database, MySQL: 5.1.66
Ahoj,
mám vazební tabulku se složeným primárním klíčem ze
sloupců shops_id
a products_id
.
CREATE TABLE `shops_products` (
`products_id` int(11) NOT NULL,
`shops_id` int(11) NOT NULL,
`types_id` int(11) unsigned NOT NULL DEFAULT '1',
`store` int(11) DEFAULT '0',
PRIMARY KEY (`shops_id`,`products_id`),
KEY `products_id` (`products_id`),
KEY `types_id` (`types_id`),
CONSTRAINT `shops_products_ibfk_1` FOREIGN KEY (`shops_id`) REFERENCES `shops` (`id`),
CONSTRAINT `shops_products_ibfk_2` FOREIGN KEY (`products_id`) REFERENCES `products` (`id`),
CONSTRAINT `shops_products_ibfk_3` FOREIGN KEY (`types_id`) REFERENCES `types` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Potřebuji updatovat hodnotu ve sloupci store v řádce vybrané právě podle složeného primárního klíče (např. 11,5). Zkouším to nějak takto, ale nedaří se.
$this->database->table('shops_products')->/**nevím jak**/->update(array('store' => $newValue));
Můžete mi prosím poradit?
- David Matějka
- Moderator | 6445
Ahoj,
je nekolik zpusobu:
$this->database->table('shops_products')->get(array(1,2))->update(array('store' => $newValue));
//toto nejdriv provede select dle primarniho klice (zalezi na poradi) a vrati activerow, na kterem provede update.
//hrozi tu chyba, kdyz by zaznam nebyl nalezen a ->update by se volalo na non-object
$this->database->table('shops_products')->wherePrimary(array(1,2))->update(array('store' => $newValue));
//jen prida do aktualniho selection podminky dle primarniho klice a
//provede pouze update dle podminky
$this->database->table('shops_products')->where(array('products_id'=>1, 'shops_id'=>2))->update(array('store' => $newValue));
//nejbezpecnejsi, jelikoz nebudu zavisli na poradi jednotlivych sloupecku slozeneho PK
//a provede pouze update