Problém s filtrováním hodnotou z jiné tabulky
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Saavikam
- Člen | 17
Ahoj,
měla bych prosím dotaz, úplně nechápu proč to nefunguje jak má.
Nefungují cizí klíče, tedy přesněji řečeno někdy ano a někdy ne.
A nechápu proč tomu tak je.
Mám definovaný model
<?php
class ActualityManager extends BaseManager {
/**
* Vrátí seznam aktualit v databázi.
* @return Selection seznam aktualit
*/
public function getNewsAll() {
$now = date('Y-m-d', Time());
$selection = $this->database->table('news');
$selection->where('news_view_from <= ?', $now);
$selection->where('news_view_to >= ?', $now);
$selection->where('scale.scale_slug LIKE ?', '%aktualita%');
$selection->order('news_view_from DESC');
return $selection;
}
}
?>
V HomepagePresenter mám fci
<?php
public function renderDefault() {
$this->template->news = $this->actualityManager->getNewsAll();
}
?>
Instanci modelu tam samozřejmě mám také
Jednoduše vykresluji v default.latte.
Problém je, že laděnka hlásí chybu: No reference found for $news->scale.
SQL:
DROP TABLE IF EXISTS `news`;
CREATE TABLE `news` (
`news_id` int(11) NOT NULL AUTO_INCREMENT,
`news_caption` varchar(250) COLLATE utf8_czech_ci NOT NULL,
`news_type_id` int(11) NOT NULL DEFAULT '11',
PRIMARY KEY (`news_id`),
KEY `news_type_id` (`news_type_id`),
CONSTRAINT `news_ibfk_4` FOREIGN KEY (`news_type_id`) REFERENCES `scale` (`scale_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
DROP TABLE IF EXISTS `scale`;
CREATE TABLE `scale` (
`scale_id` int(11) NOT NULL AUTO_INCREMENT,
`scale_caption` varchar(250) COLLATE utf8_czech_ci NOT NULL,
`scale_slug` varchar(250) COLLATE utf8_czech_ci DEFAULT NULL,
PRIMARY KEY (`scale_id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
Pokud ovšem změním název pole v tabulce new takto:
CREATE TABLE `news` (
`news_id` int(11) NOT NULL AUTO_INCREMENT,
`news_caption` varchar(250) COLLATE utf8_czech_ci NOT NULL,
`news_type_id` int(11) NOT NULL DEFAULT '11',
PRIMARY KEY (`news_id`),
`scale_id` int(11) NOT NULL DEFAULT '11',
KEY `scale_id` (`scale_id`),
CONSTRAINT `new_ibfk_2` FOREIGN KEY (`scale_id`) REFERENCES `scale` (`scale_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
Potom vše funguje. Nechápu proč tomu tak je. Můžete mi to prosím vysvětlit. Podle https://doc.nette.org/…ase/explorer by to mělo fungovat i když by se pole v tabulce news jmenovalo new_type_id.
Děkuji
Andrea