【问题标题】:Using "soft delete" with HABTM relationships in CakePHP 2在 CakePHP 2 中使用带有 HABTM 关系的“软删除”
【发布时间】:2012-05-29 12:11:36
【问题描述】:

在 CakePHP 2.x 中使用 HABTM 表,使用“软删除”技术(即在连接表中具有“已删除”布尔字段)的最佳方式是什么,以便在删除关联时“已删除”字段将只被更新为“1”而不是被删除的行?

一个例子是电影数据库,它可以是一个或多个流派的一部分。所有表都有一个“已删除”字段,因此不会从数据库中删除任何数据,只有“已删除”字段会根据需要更新为 1 或 0:

电影

  • 身份证
  • 姓名
  • 已删除

类型

  • 身份证
  • 姓名
  • 已删除

电影类型

  • genre_id
  • movie_id
  • 已删除

当添加或编辑电影时,用户可以选择一个或多个流派来关联电影。如果从电影中删除先前关联的流派,则“已删除”将设置为“1”。如果相同的流派随后与电影重新关联,它将更新回“0”。

我们已经尝试了 CakeDC 的 Utils 插件 - https://github.com/CakeDC/utils 中的 SoftDelete 行为 - 这对电影和流派非常有效,但对我们来说似乎不适用于连接表 GenreMovie,它继续完全删除行。

【问题讨论】:

    标签: php cakephp cakephp-2.0 has-and-belongs-to-many cakephp-model


    【解决方案1】:

    您可以在您的人际关系中创建deleteQuery

    还要防止删除连接表中的记录,看这个:

    唯一:布尔值或字符串 keepExisting。

       If true (default value) cake will first delete existing relationship records in the foreign keys table before inserting new ones. Existing associations need to be passed again when updating.
       When false, cake will insert the relationship record, and that no join records are deleted during a save operation.
       When set to keepExisting, the behavior is similar to true, but existing associations are not deleted.
    

    【讨论】:

    • 谢谢,您能否提供一个示例来说明 deleteQuery 的外观? CakePHP 文档似乎缺少任何使用示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    相关资源
    最近更新 更多