ユーザーとタグの間に習慣的な関係があります。ただし、タグのリストがユーザーとは別に維持されるように機能します。つまり、現在、正確に 12 のタグとN
ユーザーが存在します。新しいユーザーが追加され、さまざまなタグでタグ付けされ、削除されると、タグの数は変わりませんが、taggings_users テーブルのレコードは増加して、全員のタグを正確に反映します。この部分は機能します。
さらに、ユーザーがタグ付けされたユーザーをタグでフィルタリングできるインターフェースがあります。このインターフェースは、ユーザーA
がタグMonday
を持っている場合Tuesday
、いずれかの検索で表示されるように設計されています。さらに、ユーザーB
にタグがMonday
あり、タグを含むユーザーとタグを除外するWednesday
ユーザーを検索するために検索が実行される場合、ユーザーは表示されません (除外は包含より優先されます)。Monday
Wednesday
B
Cake は、検索に含まれるタグを要求することを管理でき、個別に、Cake はタグを除外することを要求することを管理できます。C
問題は、ユーザーがタグX
を持っていて、検索が実行されたときに、ユーザーが表示されるべきではないタグZ
を含むタグX
と除外タグを要求したユーザーを Cakephp に「認識」させることです。現在、ユーザーは結果に表示されます。Z
C
C
これは、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.