【问题标题】:cakephp saveall interrupted if before save return false如果在保存之前返回 false,则 cakephp saveall 中断
【发布时间】:2012-04-16 06:55:30
【问题描述】:

所以也许我只是错过了一些东西。 SaveAll 数据工作正常......如果我取出 beforeSave 或者无论保存什么都只返回 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;
    }

【问题讨论】:

    标签: php mysql cakephp model


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-29
        • 1970-01-01
        • 2020-12-23
        • 1970-01-01
        相关资源
        最近更新 更多