在cakephp中保存另一个模型的数据以及重定向问题

时间:2010-10-14 00:25:31

标签: cakephp model save

当我在一个模型中保存数据时,我想在另一个模型中创建一些数据并保存它。因为我can't do this using beforeSave(),我最终决定使用afterSave()在我的第二个模型中创建新的数据项。我不是在写一个博客应用程序,但是使用博客类比它相当于为每个添加的博客帖子自动创建一系列评论,当编辑帖子时,删除所有评论并重新添加新评论:< / p>

class Post extends AppModel {
    function afterSave() {
        ClassRegistry::init('Comments')->deleteAll(array('Post.id' => $this->id));
        ClassRegistry::init('Comments')->saveAll($comments); // comments contains the comments to be added
    }
}

除了afterSave()函数导致从我的控制器的添加/编辑操作(到/posts/index)的重定向被否决这一事实之外,这个工作正常,我被重定向回添加/编辑表单相反(如果我注释掉整个afterSave()方法,重定向按预期工作)。

如果你想知道为什么我没有将逻辑放在控制器中,我最初做了,但是我希望它既适用于添加和编辑操作,也适用于我用来添加的“批量”添加操作多个“帖子”一次。

我想我有两个问题:

  • 有没有更好的方法来实现这一目标 那种结果?

  • 如何使重定向工作?

感谢你阅读这篇文章,如果我没有清楚地解释清楚,我希望你能用你的想象力来看看我想要做什么。

3 个答案:

答案 0 :(得分:0)

我认为您需要在return true功能的末尾添加afterSave()。如果你不想把它放在控制器中,这似乎是一个不错的方法。虽然我会考虑在每次保存后是否总是想要添加这些注释(或者它们是什么),甚至是单场更新。

答案 1 :(得分:0)

在其他人遇到同样问题的(有点不太可能)事件中,我最终找到了设置

'atomic' => false
saveAll() options中的

解决了重定向问题。我不明白为什么。

答案 2 :(得分:0)

你做不到?:

<?php
function edit_post($id = null) {
    if (!$id && empty($this->data)) {
        // error...
    }       
    if (!empty($this->data)) {
        if ($this->Post->save($this->data)) {
            ClassRegistry::init('Comments')->deleteAll(array('Post.id' => $this->Post->id));
            ClassRegistry::init('Comments')->saveAll($comments); // comments contains the comments to be added
        } else {
            // error...
        }
    }       
    if (empty($this->data)) {
        $this->data = $this->Post->read(null, $id);
    }
}
?>