1

次のようにモデルPostとモデルがComment関連付けられているとします。

Post hasMany Comment 
Comment belongsTo Post

関連する latest を使用find('all')して every を取得するにはどうすればよいですか?PostComment

hasOne私は関係を次のように定義しようとしPostました:

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

しかし、私が a を行うと、ごとに 1 回、異なるに設定して、複数回Post->find('all')ごとに返されます。PostCommentLatestCommentComments

4

2 に答える 2

2

パラメータの配列に 'limit' => 1 を追加して、コメントを 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 に答える