Cakephp HABTM始终删除包含已使用id的记录

Cakephp HABTM始终删除包含已使用id的记录,cakephp,has-and-belongs-to-many,Cakephp,Has And Belongs To Many,我尝试将标签系统添加到我的网站 用户可以创建票据并向其添加标签 为此,我在模型票和标签之间建立了HABTM关系 我现在的问题是: 当我保存一个新关系时,我可以在tags\u tickets表中多次使用相同的Ticket id,但一旦我尝试多次使用tag\u id,它就会删除该id的旧条目 class Tag extends AppModel { public $name = 'Tag'; public $actsAs = array('Containable'); public $hasAnd

我尝试将标签系统添加到我的网站

用户可以创建票据并向其添加标签

为此,我在模型票和标签之间建立了HABTM关系

我现在的问题是:

当我保存一个新关系时,我可以在tags\u tickets表中多次使用相同的Ticket id,但一旦我尝试多次使用tag\u id,它就会删除该id的旧条目

class Tag extends AppModel {
public $name = 'Tag';
public $actsAs = array('Containable');

public $hasAndBelongsToMany = array(
        'Ticket' => array(
                'className'              => 'Ticket',
                'joinTable'              => 'tags_tickets',
                'foreignKey'             => 'tag_id',
                'associationForeignKey'  => 'ticket_id',
                'unique'                 => 'keepExisting',
        )
);
}

class Ticket extends AppModel {
public $name = 'Ticket';
public $actsAs = array('Containable');

    public $hasAndBelongsToMany = array(
        'Tag' => array(
                'className'              => 'Tag',
                'joinTable'              => 'tags_tickets',
                'foreignKey'             => 'ticket_id',
                'associationForeignKey'  => 'tag_id',
                'unique'                 => 'keepExisting',
        )
);
}
在控制器的功能中,我执行saveAll

这只是我的意思的一个例子:

ticket.id=1和tag_id=1工作正常

我现在可以添加例如ticket.id=1和tag_id=2

但是当我添加ticket.id=2和tag_id=1时,它会删除ticket.id=1和tag_id=1的条目

我不能让它正常工作。
我不想将unique更改为false,因为我不想在数据库中多次使用相同的关系。有办法解决这个问题吗?

你应该花点时间阅读


具体查看可用的配置选项,例如
unique

我通过一个解决方法解决了这个问题:

我为tags_tickets表(TagTicket)创建了一个单独的模型,并删除了Ticket和Tag模型中的HABTM关联

为此,我为Ticket和Tag模型添加了一个与TagTicket模型有很多关系的函数,这个模型得到了一个与Ticket和Tag的belongsTo关系


现在我可以随心所欲地保存和删除,并且可以在保存之前检查重复项。

这就是我的意思。当我使用unique=false时,它可以正常工作,但我可以有两个条目。这是我想阻止的事情。它应该与“keepExisting”一起使用,但它仍然会删除其他条目。它只应该删除完全相同的。似乎你加载了错误的模型或错误的蛋糕版本。有测试表明它是有效的。也许吧,但我现在尝试了多种解决方案,但都没有成功。现在唯一有效的方法就是我在上面发布的解决方案。