Nefunkční sloučení dvou tabulek
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- vibko
- Člen | 43
Dobrý den, chtěl bych vás poprosit o pomoc, proč nefunguje toto sločení dvou tabulek? Hází mi to chybu: No reference found for $product->volume
$products = $this->database->table('product')
->where('volume.product_id','product.id');
CREATE TABLE `product` (
`id` int(10) UNSIGNED NOT NULL,
`name` varchar(255) COLLATE utf8_czech_ci NOT NULL DEFAULT '',
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
CREATE TABLE `volume` (
`volume_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
`product_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
Editoval vibko (30. 7. 2016 14:19)
- GEpic
- Člen | 566
Navíc i k té struktuře, v tabulce volume nepotřebuješ sloupec
volume_id
… nejspíš si chtěl přímo sloupec id
.
Primární klíče jsou vždy AI (Auto increment) kvůli zajištění
unikátního číslování. Stejně tak nemůžeš do sloupec
product_id
napsat hodnotu, pokud neexistuje v tabulce
product
ve sloupci id
. To by pak ztratilo význam, je
však možné mít v referenčních sloupcích hodnotu NULL
, ale
to je tak rare use-case že bych se tomu radši vyhýbal, pokud není potřeba
(a neměla by být v dobře navržených databázích).
PS:
CREATE TABLE IF NOT EXISTS `product` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_czech_ci NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
CREATE TABLE IF NOT EXISTS `volume` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`product_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `product_id` (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
ALTER TABLE `volume`
ADD CONSTRAINT `volume_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `product` (`id`);
Editoval GEpic (30. 7. 2016 22:56)