Přidání do oblíbených. Spolupráce mezi třemi tabulkami

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

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

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

Ahoj,

díky, ale dostávám error: Call to undefined method Nette\Security\User::related()

David Matějka
Moderator | 6445
+
0
-

v $user samozrejme predpokladam pritomnost Nette\Database\Table\ActiveRow, tedy zaznamu vybraneho z databaze. ale osobne doporucuji spise tu druhou moznost

Donkeykong
Člen | 39
+
0
-

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

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)

mkoubik
Člen | 728
+
0
-
$article->title;
Donkeykong
Člen | 39
+
0
-

vyřešeno

Editoval Donkeykong (25. 6. 2013 23:48)