Nette spojení tří tabulek, related a cizí klíče rubrika: Programování: PHP

2 zapotocnylubos
položil/-a 7.7.2016

Dobrý den,
nejdřív popíši situaci: mám 3 tabulky (posts, comments, users), v comments tabulce jsou cizí klíče na id postu,
takže jsem mohl vypisovat commenty jednoduše $post->related('comments'), ale v tabulce comments mám ještě jeden cizí klíč s id uživatele z tabulky users (nedávám tam přímo jméno, které by to vyřešilo, protože uživatel bude mít možnost změnit jméno). Potřeboval bych nějaký návrh, jak propojit comments, které si tahám z db pomocí $post->related('comments'), a ideálně aby tam místo id uživatele bylo jméno uživatele u tabulky users, pro každý comment. Klidně to celé překopu, ale potřeboval bych nějaký návrh jak to udělat.
Stručné schéma db zde: http://i.imgur.com/WuBPUwy.png

Děkuji a doufám, že někdo pomůže.

odkaz Vyřešeno
2 vproke
odpověděl/-a 7.7.2016

Ahoj koukl bych se na https://doc.nette.org/cs/2.4/database-table, ukázka přímo v příkladu. Akorát sloupec user v comments bych přejmenoval na user_id.

Příklad z dokumentace je:

echo 'tags: ';
foreach ($book->related('book_tag') as $bookTag) {
    echo $bookTag->tag->name . ', ';
}

V tvém případě:

echo 'comments: ';
foreach ($post->related('comments') as $comment) {
    echo $comment->users->name . ', ';
}

Druhá možnost je tuším

echo 'comments: ';
foreach ($post->related('comments')->select('id, post_id, content, created_at, users.name AS user_name') as $comment) {
    echo $comment->user_name . ', ';
}

Chvíli jsem nette database aktivně nepoužíval, každopádně dokumentace to docela pokrývá...
Koukl bych se být tebou na jmené konvence, které nette database předpokládá na názvy cizích klíču, tabulek etc...

Komentáře

  • zapotocnylubos : Tak jsem změnil sloupec user v comments tabulce na user_id. Moc díky, použil jsem druhý příklad co jsi napsal a změnil jsem tam jenom drobnost $comment->user->username jenom "user" místo "users", a pak tam tedy nemám "name" ale "username". 8.7.2016

Pro plný přístup na Devel.cz se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.