Neleze přistupovat k foreign key v Latte
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- connor
- Člen | 15
Zdravím, používám Nette ve verzi 2.0.12 a PHP 5.4.3 + Dibi.
Když píšu v latte templatu makro na vytažení dat z db přes foreign key,
{$comment->user_id->name}
tak skončím s chybou,
Trying to get property of non-object
ale v tutoriálu to takhle funguje.
PostModel:
<?php
class PostModel {
public static function fetchAll() {
return dibi::fetchAll('
SELECT *
FROM [post]
ORDER BY [created]', dibi::DESC
);
}
public static function fetchSingle($id) {
return dibi::fetch('
SELECT *
FROM [post]
WHERE [post_id] = %i', $id
);
}
}
CommentModel:
<?php
class CommentModel {
public static function fetchSingleComments($id) {
return dibi::fetchAll('
SELECT *
FROM [comment]
WHERE [post_id] = %i', $id
);
}
}
HomepagePresenter
<?php
/**
* Homepage presenter.
*/
class HomepagePresenter extends BasePresenter
{
public function renderDefault()
{
$this->template->posts = PostModel::fetchAll();
}
public function renderSingle($id = 0) {
$this->template->post = PostModel::fetchSingle($id);
$this->template->comments = CommentModel::fetchSingleComments($id);
}
}
Single.latte
{block content}
<div id="posts">
<div class="post">
<h3>{$post['title']}</h3>
<small>Přidáno {$post['created']|date}</small>
<p>{$post['text']}</p>
</div>
</div><br>
<div id="comments">
{foreach $comments as $comment}
<h1>{$comment->user_id->name}</h1><br>
{$comment->text}
{/foreach}
</div>
Může mi prosím někdo poradit, kde mám chybu a poradit řešení? Děkuji.
- jiri.pudil
- Nette Blogger | 1032
makro na vytažení dat z db přes foreign key
To není makro na vytažení dat. To je makro na prostý výpis dat. To, že můžeš tímhle způsobem přistupovat k navazujícím datům z cizích tabulek, je fíčura Nette\Database. Jelikož nepoužíváš Nette\Database, nýbrž Dibi, které (jakožto nízkoúrovňová vrstva) nic takového neřeší, musíš si tuhle funkcionalitu zajistit sám. Nebo se poohlédnout třeba po Lean Mapperu.