0

ユーザーとタグの間に習慣的な関係があります。ただし、タグのリストがユーザーとは別に維持されるように機能します。つまり、現在、正確に 12 のタグとNユーザーが存在します。新しいユーザーが追加され、さまざまなタグでタグ付けされ、削除されると、タグの数は変わりませんが、taggings_users テーブルのレコードは増加して、全員のタグを正確に反映します。この部分は機能します。

さらに、ユーザーがタグ付けされたユーザーをタグでフィルタリングできるインターフェースがあります。このインターフェースは、ユーザーAがタグMondayを持っている場合Tuesday、いずれかの検索で表示されるように設計されています。さらに、ユーザーBにタグがMondayあり、タグを含むユーザーとタグを除外するWednesdayユーザーを検索するために検索が実行される場合、ユーザーは表示されません (除外は包含より優先されます)。MondayWednesdayB

Cake は、検索に含まれるタグを要求することを管理でき、個別に、Cake はタグを除外することを要求することを管理できます。C問題は、ユーザーがタグXを持っていて、検索が実行されたときに、ユーザーが表示されるべきではないタグZを含むタグXと除外タグを要求したユーザーを Cakephp に「認識」させることです。現在、ユーザーは結果に表示されます。ZCC

これは、DB で実行する必要がある結合操作の結果であることを認識しています。つまり、ユーザーCには 2 つのタグがあるため、そのユーザーにも DB から返される 2 つのレコードがあります。Cake は 1 つを正しく無視しますが、もう 1 つは正しいタグを持ち、ユーザーCがそのユーザー向けではない結果セットに入ることができるようにします。ケーキでこの問題を解決する方法はありますか。サーバーでこれを修正できます(Cコントローラーでユーザーを削除しますが、何か簡単なものが欠けているように感じます)。これは、タグを考慮してユーザーを取得するクエリです。

$conditions = array(
    'AND' => array(
        'Tagging.tag_name' => array(
            (int) 0 => 'tech'
        ),
        'NOT' => array(
            'Tagging.tag_name' => array(
                (int) 0 => 'monday'
            )
        )
    )
);

// I am also using the join options to preform this search
$joins[] = array(
    'table'         =>  'taggings_users',
    'alias'         =>  'TaggingUser',
    'type'          =>  'inner',
    'conditions'    =>  array(
        'User.id = TaggingUser.user_id'
    )
);

$joins[] =  array(
    'table'         =>  'taggings',
    'alias'         =>  'Tagging',
    'type'          =>  'inner',
    'conditions'    =>  array(
        'TaggingUser.tagging_id = Tagging.id'
    )
);

// which powers this operation
$this->paginate = array( 'conditions' => $conditions, 'joins' => $joins, 'limit' => 50 );

// there are users in here that should not be
$users = $this->paginate('User');

// thank you to anyone who helps.
4

1 に答える 1