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

时间:2013-06-26 09:33:52

标签: cakephp has-and-belongs-to-many

我尝试在我的网站上添加标签系统。

用户可以创建故障单并为其添加标记。

为此,我在模型故障单和标签之间建立了HABTM关系。

我现在的问题是:

当我保存一个新关系时,我可以在tags_tickets表中多次使用相同的Ticket id,但是一旦我尝试多次使用tag_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,因为我不想在数据库中多次使用相同的关系。有办法解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

你应该花一点时间阅读docs

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

答案 1 :(得分:0)

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

我为tags_tickets表(TagTicket)创建了一个单独的模型,并删除了故障单和标记模型中的HABTM关联。

为此,我为Ticket和Tag Model添加了与TagTicket Model的hasMany关系,并且该Model获得了与Ticket和Tag的belongsTo关系。

现在我可以按照自己的意愿保存和删除,并可以在保存之前检查重复项。