Jak z jednoho modelu přistoupit k více tabulkám

- Grelek
- Člen | 233
Zdravím, při vypisování informací do stránky blogu, jsem narazil na
problém.
Mám dvě tabulky, users a blog. V users
mám uložené uživatele s jejich jmény (full_name) a k nim
přiřazené ID. V blog mám ID článku, jeho titulek, obsah a ID
autora. V .latte souboru potřebuji vypsat údaje o článku
z tabulky blog a podle ID autora v ní uložené, vybrat
z tabulky users podle ID dotyčného uživatele.
Nevím si s tím rady, děkuji za odpovědi.

- elden46
- Člen | 37
Ahoj,
pokud mas spravne pojmenovane tabulky, tak se o to postara
Nette/Database samo.
Tabulka blog:
| id | title | content | user_id |
Tabulka user:
| id | full_name |
V presenteru:
<?php
$this->template->blogPosts = $this->context->createBlog()->getBlog();
?>
V templatu:
{foreach $blogPosts as $blogPost}
{$blogPost->title} od autora {$blogPost->user->full_name}
{/foreach}
Snad jsem nic nespletl, pisu to nasucho.

- Grelek
- Člen | 233
Nějak mi to nefunguje.. přikládám zdrojové kódy na ukázku, jsem
opravdu ten největší začátečník jak jen to jde.
blog:
| id | title | content | posted (timestamp) | author_id |
users:
| id | username | password | full_name | position | about | telephone | role |
Blog.php:
<?php
use Nette\Database\Connection,
Nette\Database\Table\Selection;
class Blog extends Selection {
public function __construct(Connection $connection) {
parent::__construct('blog', $connection);
}
}
?>
BlogPresenter.php:
<?php
class BlogPresenter extends BasePresenter {
private $blog;
public function actionDefault() {
$this->template->blog = $this->context->createBlog();
}
}
?>
default.latte:
{var $title = 'Blog'}
{block content}
<div id="body">
<div class="square" style="height: auto;">
<h1 class="motto">Vítejte v našem blogu.</h1>
<h2 class="motto">Zde se dozvíte novinky a různé akce firmy.</h2>
</div>
<div id="content">
{foreach $blog as $radek}
<table>
<thead>
<tr>
<th>{$radek->title}</th>
</tr>
</thead>
<tbody>
<tr>
<td>{$radek->posted}</td><td><a n:href="Blog:show $radek->id">Otevřít článek</a></td>
</tr>
</tbody>
</table>
{/foreach}
</div>
{/block}
a show.latte:
{foreach $blog as $radek}
{var $title = $radek->title}
{block content}
<div id="body">
<div class="square">
<h1 class="motto">{$radek->title}</h1>
<h2 class="motto">{$radek->author_id}</h2>
<p>{$radek->content}</p>
</div>
</div>
{/block}
{/foreach}
Omlouvám se za mnoho kódu, bohužel opravdu potřebuji tento problém co nejrychleji vyřešit a tak sem vkládám všechno najednou, aby jste mi mohli případně poradit.

- Grelek
- Člen | 233
elden46 napsal(a):
Pokud bys nechtel prejmenovavat tabulky, aby se chytla automaticka reflexe, tak by ses mel k vysledku dostat pomoci
$blog->ref('users','author_id')->full_name
Háže mi to tuhle chybu:
Nette\MemberAccessException
Call to undefined method Blog::ref().
I když jsem uvedl use Nette\Http nebo
use Nette\Http\Request. Zkoušel jsem i metody
getQuery(), getParameters() a buď na mě řve, že tu
metodu nezná, nebo že přistupuji k něčemu, co není objekt, když jsem
použil $this.

- Grelek
- Člen | 233
Takže jestli to má být:
$radek->ref('users','author_id')->full_name, tak to háže
chybu:
Notice
Trying to get property of non-object
Navíc když potřebuji zjistit parametr z URL, která je
http://localhost/projekt/www/blog/show/<ID>, nevím si
taktéž rady. Teď jsem hodinu a půl hledal a nenašel jsem nic, co by jen
trochu korespondovalo s mými problémy.