Název tabulky vs. jméno cizího klíče
- ajda2
- Člen | 66
Mám tyto tři tabulky:
<?php
DROP TABLE IF EXISTS `prefix_category`;
CREATE TABLE `prefix_category` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
DROP TABLE IF EXISTS `prefix_product`;
CREATE TABLE `prefix_product` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`category_id` int(10) unsigned NOT NULL,
`active` tinyint(1) unsigned NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
KEY `fk_product_category1_idx` (`category_id`),
CONSTRAINT `prefix_product_ibfk_2` FOREIGN KEY (`category_id`) REFERENCES `prefix_category` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
DROP TABLE IF EXISTS `prefix_product_category`;
CREATE TABLE `prefix_product_category` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`product_id` int(10) unsigned NOT NULL,
`category_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `fk_product_category_product1_idx` (`product_id`),
KEY `fk_product_category_category1_idx` (`category_id`),
CONSTRAINT `prefix_product_category_ibfk_2` FOREIGN KEY (`category_id`) REFERENCES `prefix_category` (`id`),
CONSTRAINT `prefix_product_category_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `prefix_product` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
?>
Pokud chci takto vybrat záznamy z DB:
<?php
$productCategoryTable->where(array('category_id' => 1, 'prefix_product.active' => 1)->order('prefix_product.id');
?>
Dostanu výjimku:
Nette\Database\Reflection\MissingReferenceException: No reference found
for $prefix_product_category->prefix_product
Pokud ale dotaz upravím na toto:
<?php
$productCategoryTable->where(array('category_id' => 1, 'product.active' => 1))->order('product.id');
?>
Proběhne dotaz v pořádku.
Chci se zeptat, zda Nette\Database nějak ošetřuje prefixy v názvech
tabulek, nebo existuje nějaké pravidlo, podle kterého dávat názvy tabulek,
na které odkazuji (název sloupce s cizím klíčem?)?
Pokud používám metodu ActiveRow::ref
, nebo
ActiveRow::related
tak uvádím název tabulky včetně prefixu a
název sloupce, přes který se odkazuji na danou tabulku a je to
v pořádku.
Jsem z toho nyní mírně zmaten.
Běží to na Nette 2.1.3
Předem děkuji za odpověď.
Editoval ajda2 (18. 5. 2014 16:33)
- petr.pavel
- Člen | 535
S prefixovanými tabulkami je problém. V NDB jsem s nimi nedělal, ale předpokládám, že to bude stejné jako s NotORM. Budeš si muset definovat vlastní Reflection, což bude opruz už kvůli tomu, že dokumentace ti vůbec neporadí.