我在用户和标签之间存在着一种关系。但是,它的工作原理是我们的标签列表与用户分开维护。这就是说目前正好有12个标签和N
个用户。添加新用户,标记不同的标签并删除时,标签数量不会改变,但taggings_users表中的记录会增加,以准确反映每个人的标签。这部分有效。
此外,还有一个界面允许用户按标签过滤标记的用户。此界面的设计使得如果用户A
具有标记Monday
和Tuesday
,那么它们将显示在搜索中。此外,如果用户B
包含标记Monday
和Wednesday
,则会执行搜索以搜索包含标记Monday
并排除标记Wednesday
的用户,然后用户{ {1}}不应出现(排除特朗普包含)。
Cake可以在搜索中管理需要包含的标签,另外,Cake可以管理要求标签被排除。麻烦在于Cakephp“知道”当用户B
包含标记C
和X
并且搜索已执行时请求用户包含标记Z
并排除标记{{1}用户X
不应该出现。目前,用户Z
确实出现在结果中。
我意识到这是必须在数据库上执行的连接操作的结果。即,由于用户C
有两个标签,该用户还有两个从DB返回的记录。 Cake正确地忽略了一个,但另一个具有正确的标记,并允许用户C
输入不适合该用户的结果集。有没有办法让蛋糕解决这个问题。我可以在服务器上修复此问题(删除控制器中的用户C
,但我觉得我错过了一些简单的事情)。这是一个让用户考虑标签的查询:
C
答案 0 :(得分:1)
如果不进行测试,我认为在添加其他连接时它会起作用:
$joins[] = array(
'table' => 'taggings',
'alias' => 'Tagging2',
'type' => 'inner',
'conditions' => array(
'TaggingUser.tagging_id = Tagging2.id'
)
);
请注意,我将“alias”更改为“Tagging2”。然后
$conditions = array(
'AND' => array(
'Tagging.tag_name' => array(
(int) 0 => 'tech'
),
'NOT' => array(
'Tagging2.tag_name' => array(
(int) 0 => 'monday'
)
)
)
);
另外我不认为这个“(int)0”语法是必要的。写
就足够了$conditions = array(
'AND' => array(
'Tagging.tag_name' => 'tech',
'NOT' => array(
'Tagging2.tag_name' => 'monday'
)
)
);