Kohana / ORM - 为视图分配关系

时间:2011-06-28 12:57:10

标签: object orm kohana kohana-3

我在控制器的方法中有一个对象:

$post = ORM::factory('post', array('slug' => $slug);  

发送到视图:

$this->template->content = View::factory('view')->bind('post', $post);

我在帖子和评论之间创建了1-n关系。到目前为止一切都很好。

主要问题是:我应该如何将评论传递给视图?目前我在视图中得到它们($post->comments->find_all()),但我觉得这不是最好的方法(并且我认为不符合MVC标准)。我也在考虑将它们分配给控制器中的属性($post->comments)但是我得到一个关于未定义属性的错误(这对我来说很有意义)。

您如何建议解决该问题?

1 个答案:

答案 0 :(得分:1)

为什么不抓取控制器中的注释并将它们传递给视图进行演示?至少我就是这样做的。

$post = ORM::factory('post', array('slug' => $slug));
$comments = $post->comments->find_all();
$this->template->content = View::factory('view')->bind('comments', $comments);

关于你的多页评论,我认为你的意思是帖子...... 这就是我通常会做的事情。

$posts = ORM::factory('post', array('slug' => $slug))->find_all();
$view = new View('view');
foreach ($posts as $post) {
    $view->comments = $post->comments;
    $this->template->content .= $view->render();
}

虽然这可能不是实现此目的最资源友好的方式,特别是如果您正在处理许多帖子。因此,将帖子传递给视图,然后在视图中执行foreach循环可能是更好的方法。

$posts = ORM::factory('post', array('slug' => $slug))->find_all();
$this->template->content = View::factory('view')->bind('posts', $posts);

虽然我也不一定认为从视图中运行选择查询是世界上最糟糕的事情。虽然我不是专家......;)

我刚才就CodeIgniter问过这个问题...将一个数组传递给视图并循环显示它似乎是最受欢迎的响应...

Using CodeIgniter is it bad practice to load a view in a loop