【问题标题】:CakePHP afterSave TimingCakePHP afterSave 计时
【发布时间】:2011-08-30 15:47:03
【问题描述】:

我有一种情况,在模型的 afterSave 回调中,我试图访问来自远距离关联的数据(它是具有非常不稳定的关联链接的旧数据模型)。我发现在回调中我可以对模型执行 find 调用,但是如果我立即退出,则永远不会将记录插入到数据库中。缺少记录意味着我无法使用刚刚插入当前模型的数据在相关模型上执行查找。

我没有发现任何关于何时实际提交数据与何时使用afterSave 回调的信息。我正在使用遗留代码,但我没有看到任何迹象表明我们正在专门从事交易,所以我试图弄清楚我的选择可能是什么。

谢谢。

更新

该场景的要点是:我们正在接受活动注册,但人们可以被列入等待名单。用户可以注册(或被注册)给定的Date。注册完成后,我需要检查等待列表是否存在注册用户(WaitList.user_id)在注册日期(WaitList.date_id)的记录。如果存在这样的记录,则可以将其删除,因为它已成为有效注册。

旧架构将我置于注册不直接与日期绑定的位置,因此我无法轻松获得Date.id。相反,Registration->Registrant->Ticket->Date。不直观,我知道,但现在就是这样。甚至更好(包括讽刺),我们有一个名为attendees 的视图,它汇总了所有这些信息,我可以从中使用新创建的Registration->id 来返回Attendee.date_id。由于该记录不存在,因此在视图中不可用。

希望这能提供更多背景信息。

【问题讨论】:

    标签: cakephp cakephp-1.2


    【解决方案1】:

    在 afterSave 中查找查询的目的是什么?

    更新

    是否可以正确关联记录?或者我们是否在谈论太多的重构而不值得?如果无法修改记录之间的关联,您可以将检查移至控制器。

    类似的东西(在伪代码中)

    if (save->isSuccessful) {
        if (onWaitList) {
            // delete record
        }
    }
    

    这不是最佳做法,但它可以帮助您解决问题。

    【讨论】:

    • 我已经用一些背景故事更新了这个问题。也许这将有助于回答您的问题。
    • 这个应用程序无处不在。我试图从视图和其他各种有趣的东西中解决数据操作问题。重新处理架构和所有现有数据是不会发生的。我有一个糟糕的解决方案,但我正在寻找不错的选择,似乎缺少的数据库记录是一个不错的起点。老实说,这是我在afterSave 中没想到的一件事。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多