0

Page モデルに次の仮想フィールドがあります

function __construct($id = false, $table = null, $ds = null) {
    $this->virtualFields['fans'] = 'SELECT COUNT(Favorite.id) FROM favorites AS Favorite WHERE Favorite.page_id = Page.id AND Favorite.status = 0';
    parent::__construct($id, $table, $ds);
}

これは期待どおりに機能し、ページをお気に入りに追加したユーザーの数が表示されます。問題は、開発中に一部の行で user_id と page_id のペアが重複しているため、誤った数または一意のユーザーが返されることです。そのような句でグループを追加しようとしました

$this->virtualFields['fans'] = 'SELECT COUNT(Favorite.id) FROM favorites AS Favorite WHERE Favorite.page_id = Page.id AND Favorite.status = 0 GROUP BY Favorite.user_id';

しかし、うまくいきません。問題のデバッグを試みましたが、「許容メモリ サイズが使い果たされました」というエラー メッセージが表示されます。私も使用してみましたがSELECT COUNT('Favorite.user_id')SELECT DISTINCT('Favorite.user_id')どちらも機能しませんでした。DISTINCT は配列を返すため、答えからさらに離れていると思います(私は信じていますか?)

これは既知の CakePHP の問題ですか? グループを間違って実装していますか?afterfind 以外にこれを行う別の解決策はありますか?

4

1 に答える 1

1

これを試して

    SELECT COUNT(DISTINCT Favorite.user_id)

そのように:

 $this->virtualFields['fans'] = 'SELECT COUNT(DISTINCT id) FROM favorites  WHERE  status = 0';
于 2013-06-14T13:23:20.687 に答える