Neleze přistupovat k foreign key v Latte

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 | 1035
+
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.

RSS tématu Téma zavřeno