我正在尝试将所有commments
与我当前的post
相关联,我的做法如下:
$this->Post->Comment->find('all', array('conditions' => array('post_id' => $id)));
但在我看来,这有点令人不安。我为什么要给post_id
?我希望Comment
与当前Post
相关并不明显吗?
答案 0 :(得分:1)
$this->Post->Comment->
...指的是模型结构。 $this
表示此类的此实例,而不是当前记录。
所以$this
是PostsController,$this->Post
是Post模型,$this->Post->Comment
是Comment模型。这些都不是指特定的记录。
$this->Post->id
只有在先前的查询(在此方法中)检索到明确的结果时才会被设置,我只依赖它在$this->MyModel->save($data)
之后立即设置,否则我明确地设置它,如:< / p>
$this->MyModel->id = $id;
就个人而言,我会按如下方式进行,并在一个语句中检索所有必需的相关数据:
$this->Post->contain(array('Comment')); // If you're using containable, which I recommend. Otherwise just omit this line.
$this->Post->read(null,$id);
现在,您将在这样的数组中包含Post及其相关注释:
Array
(
[Post] => Array
(
[id] => 121
[title] => Blah Blah an More Blah
[text] => When the bar is four deep and the frontline is in witch's hats what can be done?
[created] => 2010-10-23 10:31:01
)
[Comment] => Array
(
[0] => Array
(
[id] => 123
[user_id] => 121
[title] => Alex
[body] => They only need visit the bar once in the entire night.
[created] => 010-10-23 10:31:01
)
[1] => Array
(
[id] => 124
[user_id] => 121
[title] => Ben
[body] => Thanks, Alex, I hadn't thought of that.
[created] => 010-10-23 10:41:01
)
)
)
...你得到这样的评论:
$comments = $this->data['Comment'];
您想要的所有内容(您可以在contain()
调用中进行微调)都会在一个方便的数据包中返回。顺便说一句,如果你还没有阅读可包含的行为。越早开始使用它,生活就会越轻松。
答案 1 :(得分:0)
如果您未指定条件($this->Post->Comment->find('all');
),您将获得所有评论及其相关记录。
建议在条件中指定型号名称:$this->Post->Comment->find('all', array('conditions' => array('Comment.post_id' => $id)));
。这样,您将获得特定帖子和所有相关(评论)数据的评论。
如果您不喜欢'conditions'
数组,则需要明确指定标识为Leo(来自Post控制器):
$this->Post->id = $id;
$this->Post->read();
这样您就可以获得帖子以及与之相关的所有数据。
请注意,在第一种方法中,您检索与注释和第二种方法相关联的所有数据 - 与帖子关联的所有数据。