4

PosthasManyという 2 つのモデルがありCommentます。Post2 つ未満のものをすべて選択するにはどうすればよいCommentですか?

findwith ,を使用してみました'fields'=>array('COUNT(Comment.id) as numComments','Post.*')(その後、numComments < 2inを実行しました'conditions')。しかし、私はUnknown column 'Comment.id' in 'field list'エラーが発生します。

ありがとう!

編集:このクエリを生成するためにCakePHPを取得しました:

SELECT `Post`.*, FROM `posts` AS `Post` 
    LEFT JOIN comments AS `Comment` ON (`Post`.`id` = `Comment`.`text_request_id`)  
    WHERE COUNT(`Comment`.`id`) < 2 
    GROUP BY `Comment`.`post_id` 
    LIMIT 10

しかし#1111 - Invalid use of group functionCOUNT関数でエラーが発生します。

編集: 解決済み、WHERE COUNT の代わりに HAVING COUNT を使用します。

4

3 に答える 3

17
class Post extends AppModel
{
    var $name = "Post";
    var $hasMany = array('Comment'=>array('counterCache'=>true));
}

投稿に comment_count フィールドを追加する

それだけです:-)

于 2010-06-26T11:56:40.047 に答える
1

生の SQL では、クエリは次のようになります。

SELECT Post.*
FROM Post LEFT JOIN Comment ON Post.id = Comment.post_id
GROUP BY Comment.post_id
HAVING COUNT(Comment.id) < 2

これらのほとんどは、Cake に簡単に変換できます。

array(
    'having' => array('COUNT(Comment.id) <' => 2),
    'group'  => array('Comment.post_id')
)

ただし、Cake は hasMany テーブルを自動的に結合しません。これは手動で行う必要があります。詳細については、ドキュメントを参照してください。

編集:

having次のように句を実行できます。

array(
    'group' => 'Comment.post_id HAVING COUNT(Comment.id) < 2'
)

制限はstringグループのみに適用され、group by なしでは実行できません。Cake 3 には、次のようSQLな構文が含まれる可能性があります。HAVING

于 2010-06-26T08:15:08.860 に答える