【问题标题】:how to allow duplicate entries in database in Zend Framework 2?如何在 Zend Framework 2 中允许数据库中的重复条目?
【发布时间】:2012-10-11 06:34:17
【问题描述】:

最近我创建了一个简单的注册表单,当我尝试保存数据时,如果我输入现有的用户名或电子邮件,我会收到一条错误消息,提示查询已停止,因为该字段已存在

在某些情况下,这是一个很棒的功能,我可以在电子邮件案例中使用它。

我不确定我是否必须在表单验证器、config.php 或我的模块中进行设置。

这是我的保存方法:

public function saveUser(User $user)
{

    $data = array(
        'username'  => $user->username,
        'email'     => $user->email,
        'password'  => $user->password,
    );

    $id = (int) $user->user_id;

    if ($id == 0) {
        $this->insert($data);
    } elseif ($this->getUser($id)) {
        $this->update(
            $data,
            array(
                'user_id' => $user_id,
            )
        );
    } else {
        throw new \Exception('Form id does not exist');
    }
}

这是一个简短的错误:

Statement could not be executed
...
QLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'admin' for key 'username'
....

就像我说的,我可以将此错误用于电子邮件,因为我想要唯一的电子邮件,但我不知道如何捕获此错误并以更好的格式显示它,可能就像一个验证错误。

关于这个问题有什么想法吗?

谢谢

【问题讨论】:

    标签: php forms validation duplicates zend-framework2


    【解决方案1】:

    如果您使用 Zend_Form 创建表单,您可以使用Zend_Validate_Db_NoRecordExists 检查电子邮件是否已经存在。

    【讨论】:

    【解决方案2】:

    这是您的SQL server 返回的错误。要摆脱这种情况,您需要从您的字段 username 中删除 UNIQUE KEY

    至于如果用户电子邮件重复显示“漂亮的错误消息”,恐怕您唯一的选择就是在执行INSERT之前检查它的存在。

    我曾经有一个抛出Database_UniqueKey_Exception( $field) 的数据库模型,它允许您以非常时尚的方式执行此操作,但 AFAIK Zend 不支持对独特关键问题的特殊处理,您必须解析错误消息(我不会t去那里)或提前检查。

    【讨论】:

    • 对我的最后一段有什么想法吗?
    【解决方案3】:

    这是一个关于如何实现您想要的示例的示例。 Zend Framework: Validate duplicate database entry

    它使用MySQL PDOException code: 23000 检查是否发生重复输入异常并将错误消息附加到表单。这样您就不需要进行额外的数据库查询来检查重复的username 条目。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多