1

假设我有一个模型Post和一个Comment相关的模型如下:

Post hasMany Comment 
Comment belongsTo Post

如何使用它find('all')来检索每一个Post与其相关联的最新版本Comment

我尝试将hasOne关系定义Post为:

var $hasOne = array('LatestComment' => array('className' => 'Comment', 'order' => 'LatestComment.created DESC'));

但是,当我执行 a 时Post->find('all'),它每隔Post多次返回一次,每次返回一次Comment,并LatestComment设置为不同的Comments

4

2 回答 2

2

您可以将 'limit' => 1 添加到参数数组中,以仅返回一条评论。

或者,您可以使用 Containable 行为简单地限制执行查找时返回的评论数,而不是定义另一个关系。

$this->Post->find('all',array(
                     'contain' => array(
                          'Comment' => array(
                              'order' => 'Comment.created DESC',
                              'limit' => 1
                          )
                      )
                  );

如果您想过滤任何相关集而不定义关系(例如按作者或在日期范围内),这将非常有用。

确保将 Containable 行为添加到您引用的任何模型。

于 2011-02-23T16:59:22.383 回答
0

要删除您要使用的重复项:查找所有查询中的 GROUP BY。我相信 Cake 也有一个 'group' => 选项。

于 2011-02-24T03:44:39.823 回答