Nette\Database prepojenie cudzim klucom

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
isotrexin
Člen | 5
+
0
-

som zaciatocik v nette a potreboval by som prepojit stlpec „dodavatel“ v tabulke „tovar“ s tabulkou „dodavatelia“. Tabulky som vytvoril takto:

CREATE TABLE `tovar` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `nazov` varchar(50) NOT NULL,
  `dodavatel` int(10) unsigned NOT NULL,
  `cena` decimal(8,2) NOT NULL,
  `min` int(3) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `dodavatel` (`dodavatel`),
  CONSTRAINT `dodavatel` FOREIGN KEY (`dodavatel`) REFERENCES `dodavatelia` (`id`)
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
CREATE TABLE `dodavatelia` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `meno` varchar(20) NOT NULL,
  `adresa` varchar(30) NOT NULL,
  `ico` int(15) NOT NULL,
  `telefon` int(30) NOT NULL,
  `email` varchar(30) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;

Chyba je v tom, ze ladenka mi vypisuje chybu: „Trying to get property of non-object“ pri volani v sablone

$column->dodavatel->meno

a nic sa nevrati. Funguje mi to iba sposobom

{$column->ref('dodavatel')->meno}
{foreach $tovar as $column}
    <tr n:class="$iterator->isOdd() ? odd : even">
        <td>{$column->nazov}</td>
        <td>{$column->dodavatel->meno}</td>
        <td>{$column->cena} €</td>
        <td>{$column->min}</td>
    </tr>
 {/foreach}

Preco nie je mozne volat prvym sposobom?? Voperd velka vdaka

Editoval isotrexin (23. 9. 2012 21:21)

Eda
Backer | 220
+
0
-

Protože tím prvním voláním přistoupíš přímo k proměnné dodavatel, což bude v tu chvíli hodnota kolonky dodavatel z aktuálního záznamu (hodnota cizího klíče). Funkce ref() počítá s tím, že budeš chtít provázaný záznam, proto ti vrátí očekávaný výsledek.

Doporučuju přejmenovat v první tabulce kolonku dodavatel třeba na dodavatel_id. Pak budeš k hodnotě cizího klíče přistupovat přes $column->dodavatel_id a k navázanému záznamu přes $column->dodavatel (pro jmnéno pak třeba $column->dodavatel->meno).

Editoval Eda (23. 9. 2012 22:17)

isotrexin
Člen | 5
+
0
-

rozumiem, velka vdaka za radu!