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

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

CZechBoY
Člen | 3608
+
0
-

Zkus misto scale napsat news_type

Editoval CZechBoY (9. 3. 2016 8:43)