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