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

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

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.