我有一个包含多个字段的表,其中2个字段是“startdate”和“enddate”,它们标记了记录的有效性。如果我插入1条新记录,则新记录在开始日期和结束日期方面不能与其他记录重叠。
因此,在插入新记录时,我可能需要调整预先存在的记录的“startdate”和“enddate”的值,以使它们不与新记录重叠。同样,任何与新记录重叠100%的预先存在的记录都需要删除。
我的表是一个InnoDB表,我知道它支持这样的交易。
是否有任何示例显示使用事务进行插入/更新/删除(所有这些都必须成功才能使其中任何一个成功并被提交)? 我不知道该怎么做。大多数示例仅显示使用saveAssociated(),我不确定它是否能够满足删除操作的需要?
由于 凯文
答案 0 :(得分:0)
也许您可以使用beforeSave callback搜索预先存在的记录,并在保存新记录之前将其删除。
来自文档:
在此功能中放置任何预保存逻辑。成功验证模型数据后立即执行此功能,但在保存数据之前。如果要继续保存操作,此函数也应返回true。
答案 1 :(得分:0)
我认为您正在寻找交易:http://book.cakephp.org/2.0/en/models/transactions.html
这应该允许您运行查询 - 启动事务,执行任何所需操作,然后根据结果提交或回滚。虽然,根据您的描述,我认为在提交任何内容之前进行一些读取和调整数据可能是更好的方法。无论哪种方式,交易都不是一个坏主意!