CakePHP - HABTM - 将多个标签添加到多个点
Posted
技术标签:
【中文标题】CakePHP - HABTM - 将多个标签添加到多个点【英文标题】:CakePHP - HABTM - adding multiple tags to multiple points 【发布时间】:2010-02-17 00:45:27 【问题描述】:我正在尝试使用多个标签来“标记”多个“点”。我成功地标记了我的单点。不幸的是,当我尝试在另一个点上使用标签(例如“test2”)作为标签时,如果我将“唯一”设置为 false 或“唯一”设置为 true,则会出现重复输入错误,它将删除“test2”的所有其他点的我的标签并创建一个新的。
这是我的帖子数据:
Array
(
[Tag] => Array
(
[id] => 4b7af6d7-787c-4f10-aa49-2502c0a80001
[name] => Test2
)
[Point] => Array
(
[id] => 4b47c66f-a130-4d12-8ccd-60824051e4b0
)
)
在我的标签模型中,我有这个:
public $hasAndBelongsToMany = array(
'Point' => array(
'className' => 'Point',
'joinTable' => 'points_tags',
'foreignKey' => 'tag_id',
'associationForeignKey' => 'point_id',
'unique' => false)
);
我也尝试过将 'unique' 设置为 true。不幸的是,这将删除连接表 ('points_tags') 中的任何其他“Test2”实例。
我已经使用 save() 和 saveAll() 尝试过这个。两者都给我这个错误:
警告 (512):SQL 错误:1062:重复条目 '4b7af6d7-787c-4f10-aa49-2502c0a80001-4b47c66f-a130-4d12-8ccd-608' 键 'MAN_ADD' [CORE/cake/libs/model/数据源/dbo_source.php,第 527 行]
查询:插入points_tags
(tag_id
,point_id
,id
)值('4b7af6d7-787c-4f10-aa49-2502c0a80001','4b47c66f-a130-4d12-8ccd-60824051e4b0','4b7b39f3-46f8 -4744-ac53-3973c0a80001')
想法????
建议????
【问题讨论】:
【参考方案1】:id
来自哪里?我猜它是表的主键,从我从你的帖子中了解到的(请写得更清楚,帮助我们帮助你)问题不在于点或标签,而在于 points_tags 表中的 id。
【讨论】:
你说的id要么是tag_id,要么是point_id。 tag_id 来自标签(如果它已经存在),而 point_id 是我要标记的项目的 id。我心中的问题是,如果另一个项目中已经存在一个条目,那么 points_tags 条目就会被覆盖。例如:点'a'有一个标签——测试如果我也想要标签点'b'和标签'test',它将删除points_tags中带有标签'test'的点'a'的当前条目并插入一个条目对于带有标签“测试”的点“b”。因此删除任何以前与“测试”建立的关联。这对你来说清楚了吗?【参考方案2】:当您使用 save 方法时,您是在循环中执行它吗?请记住,最佳做法是在循环保存时调用 model::create()。
我经常发现,当我遇到 HABTM 保存行为问题时,是因为我没有调用 model::create。
【讨论】:
我实际上正在这样做。问题是我的保存首先从我的连接表中选择我所有的 tag_id,然后删除所有这些。或者,它应该根据我的 tag_id 和 point_id 从我的连接表中选择所有。以上是关于CakePHP - HABTM - 将多个标签添加到多个点的主要内容,如果未能解决你的问题,请参考以下文章
如何将数据写入 CakePHP 中 HABTM 连接表的 HABTM 关联?
CakePHP 使用 saveAll:如何使用 HABTM 链接记录保存额外数据?