【问题标题】:Cakephp HABTM deletes always the records which contains a already used idCakephp HABTM 总是删除包含已使用 id 的记录
【发布时间】:2013-06-26 09:33:51
【问题描述】:

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

用户可以创建工单并向其添加标签。

为此,我在 Models Ticket 和 Tag 之间建立了 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,因为我不想在数据库中有多次相同的关系。有没有办法解决这个问题?

【问题讨论】:

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


    【解决方案1】:

    你应该花点时间阅读docs

    具体看一下可用的配置选项,比如unique

    【讨论】:

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

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

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

    为此,我为 Ticket 和 Tag 模型添加了与 TagTicket 模型的 hasMany 关系,并且此模型与 Ticket 和 Tag 建立了 belongsTo 关系。

    现在我可以随意保存和删除,并且可以在保存前检查重复项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-29
      • 2012-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多