cakephp saveall在保存返回false之前中断

时间:2012-04-16 06:55:31

标签: php mysql cakephp model

所以也许我只是遗漏了一些东西。 SaveAll数据工作得很好......如果我取出之前的优点,或者只要保存所有内容就返回true。我要做的是检查user_group_id / user_friend_id的组合是否已经存在。如果它不保存。

但是,如果您为一条记录返回false,则整个saveAll函数退出运行。也许这是故意的?官方文件仅限于回答这个问题。

显然我可以将支票移动到一个函数,但这似乎更好地涵盖了每个插入/更新。

function beforeSave($options) {
        //dont let any duplicates be saved
        $count = $this->find('count', array(
            'conditions' => array(
                'user_group_id' => $this->data['UserGroupFriend']['user_group_id'],
                'user_friend_id' => $this->data['UserGroupFriend']['user_friend_id'],
            )));
        if ($count)
            return false;
        else
            return true;
    }

2 个答案:

答案 0 :(得分:1)

beforeSave()中,您可以检查$this->data是否有无效值,如果找到,请修改$this->data以删除它们。然后返回true,只保存$this->data中仍然存在的数据。

答案 1 :(得分:0)

这样做的一种侵入性较小(也许更可预测)的方法是让框架为您处理。不要手动将验证混合在一起,而是让Cake为您完成。在UserFriendGroup上创建custom validation rule以验证这两个字段的唯一性,然后saveAll()方法正常工作。这只是在正常验证执行期间验证的其他内容。

我已经链接到Cake 1.3的自定义验证规则,因为你没有指定版本,但我确信2.x有一些非常相似的东西。