1

リレーショナル テーブルの行数をカウントしようとしてmany to manyいますが、常に間違った値が返されます。1 の場合は常に 2 を返します。

PS: mysql のすべてのモデルと外部キーは正しく構成されています。

コメント表:

id  |  name
10      Comment Test

ユーザー テーブル:

id  |  name
20     User Test

いいね (コメント/ユーザー) 多対多:

user_id  |  comment_id
20          10

コード:

$criteria = new CDbCriteria;
$criteria->select='*, COUNT(likes.id) AS count_likes'; // I believe the error is in the use of COUNT (likes.id).
$criteria->with=array('likes'=>array('on'=>'user_id=20'));
$model = Comments::model()->findByPk($_GET['id'], $criteria);

// Return Wrong Value
echo $model->count_likes; // Return 2 where should be 1. (I need to use this case)
echo count($model->likes); // Return right value 1.
4

2 に答える 2

2

Statistical Queryを使用する必要があります。例:

あなたのコメントモデルで:

public function relations()
{
    return array(
        // ...

        // I assume your relation table's name is "likes"
        'likes'=>array(self::MANY_MANY, 'Users', 'likes(comment_id, user_id)'),
        'likesCount'=>array(self::STAT, 'Users', 'likes(comment_id, user_id)'),

        // ...
    );
}
于 2013-05-03T07:05:00.760 に答える
0

LIKES テーブルから選択して、ユーザー ID とコメント ID でグループ化する予定はありますか?
その場合は、GROUP BYを使用できます 。こちらの SQLFiddle をご覧
ください http://sqlfiddle.com/#!2/bc29b8/1/0
SELECT uid, cid, COUNT(likes.cid) FROM likes GROUP BY uid, cid

于 2013-05-03T05:18:46.607 に答える