Nette\Database prepojenie cudzim klucom
- isotrexin
- Člen | 5
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
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)