Přidání do oblíbených. Spolupráce mezi třemi tabulkami
- Donkeykong
- Člen | 39
Ahoj,
řeším další začátečnický problém. Chci udělat klasickou možnost přidání nějakého článku do oblíbených, kliknutím na tlačítko. Jestli jsme pochopil správně, nejlepší je mít pro toto novou tabulku. Čili mám tabulky: user(políčka: id, username, password), article (políčka: id, title, content) a teď jsem si vytvořil tabulku user_favourites (políčka: id, user_id, article_id)
Když kliknu na tlačítko u daného článku tak si zjistím id přihlašeného uživatele, id článku a uložím je do tabulky user_favourites. Sem jsem došel a skončil :). Nyní potřebuju totiž nějak v šabloně u daného uživatele vypsat právě jeho oblíbené články (jejich title). Tuším že k tomu budu muset použít related, kterou celkem obstojně zvládám při použití mezi dvěmi tabulkami, ale toto je zatím na moje síly. Dokázal by někdo poradit?
Díky
- David Matějka
- Moderator | 6445
v tabulce user_favourites by ani nemuselo byt id a primarni klic udelat
slozeny z tech 2 sloupecku, ale to je jedno..
a k dotazu; mas dve moznosti. prvni je podobna prikladu v dokumentaci https://doc.nette.org/cs/database
foreach($user->related('user_favourites') as $fav)
{
$article = $fav->ref('article'); //nebo proste $fav->article
}
a druha
$articles = $connection->table('article')->where('user_favourites:user_id', $user->id)
ale pozor, v nette 2.1 zapis user_favourites:user_id
fungovat
nebude, misto toho se bude muset
pouzit :user_favourites.user_id
Editoval matej21 (24. 6. 2013 18:39)
- Donkeykong
- Člen | 39
Ahoj,
díky, ale dostávám error: Call to undefined method Nette\Security\User::related()
- David Matějka
- Moderator | 6445
v $user samozrejme predpokladam pritomnost Nette\Database\Table\ActiveRow, tedy zaznamu vybraneho z databaze. ale osobne doporucuji spise tu druhou moznost
- Donkeykong
- Člen | 39
Moje chyba, opravil jsem, ale nyni dostavam Call to undefined method Nette\Database\Table\Selection::related
<?php $iterations = 0; foreach ($user->related(‚user_favourites‘) as $fav): echo Nette\Templating\Helpers::escapeHtml($article = $fav->ref(‚article‘), ENT_NOQUOTES) ?>
- Donkeykong
- Člen | 39
Tak samozřejmě jsem teď mel blbou malou chybu. Teď už error nehází. Nicméně kód, který jsi poslal
<?php
foreach($user->related('user_favourites') as $fav)
{
$article = $fav->ref('article'); //nebo proste $fav->article
}
?>
mi vypisuje id toho article. Já ale potřebuju title
Editoval Donkeykong (25. 6. 2013 20:42)