如何从CakePHP中的关联模型获取数据?

时间:2011-07-11 03:57:42

标签: cakephp comments cakephp-1.3

我用cakephp创建了一个简单的博客,其中有一些帖子和一些评论。 烘焙应用程序后,它会创建一个comments文件夹,其中包含index.ctpposts文件夹the index.ctp

我想做的是将它们显示为休闲:

Post1
  comment1
  comment2
Post2
  comment1
  comment2

如果我将评论放在posts / index.ctp中,我会收到一条错误,告诉我$comments未定义。

我该怎么做? 感谢

编辑: 好吧,我很抱歉卷土重来,但它仍然有点不清楚。我确实有$hasMany关系设置,实际上在显示帖子的页面上我有一个指向评论的链接。我希望他们唯一能够在与帖子相同的页面中显示。

我应该可以说<?php echo $comment['Comment']['content']; ?>

1 个答案:

答案 0 :(得分:4)

检查您的控制器。

如果要在帖子视图中显示评论信息,您需要确保帖子控制器可以加载数据。

“CakePHP”方式是定义模型之间的关系。检查您的烘焙模型,看看是否有这样的东西:

class Post extends AppModel{

var $hasMany = array( 'Comment' );

}

当模型相互关联时,Posts控制器将自动查找Post对象及其关联的Comment对象。

例如,这一行:

$this->Post->findById( $id );

会产生这样的东西:

Array
(
    [Post] => Array
    (
        [id] => 42
        [text] => Post1
    )

    [Comment] => Array
    (
        [0] => Array
        (
            [id] => 1
            [post_id] => 42
            [text] => Comment1
        )

        [1] => Array
        (
            [id] => 2
            [post_id] => 42
            [text] => Comment2
        )
    )
)

http://book.cakephp.org/

的良好文档

编辑:在评论后添加更多信息

只要模型具有关联,CakePHP就会适当地提取数据(除非你设置Recursive => false或使用Containable,我认为你不是)。

检查你的PostsController控制器,看看它是如何加载数据的。我猜它正在做类似以下的事情:

$post = $this->Post->findById( $id );
$this->set( compact( 'post' ) );

$this->data = $this->Post->findById( $id );

检查存储检索数据的方式,然后从视图中访问该变量。

例如,如果它将数据存储在名为“$ post”的变量中,您可以在视图中输入类似的内容:

// output the 'text' field of the 'post' object
echo $post[ 'post' ][ 'text' ];  

// loop through associated comments
foreach ( $post[ 'comment' ] as $comment ){  

    //output the 'text' field of a 'comment' object
    echo $comment[ 'text' ];  

}

默认情况下,CakePHP在检索数据后会在数组中隐藏大量细节。诀窍是知道数据的层次结构并相应地从数组中获取数据。