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
+
0
-

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
+
0
-

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
buffus
Člen | 101
+
0
-

Díky moc za rychlou a vyčerpávající odpověď. Už to frčí.