gpt4 book ai didi

php - Yii 不验证 2 列的唯一索引

转载 作者:行者123 更新时间:2023-11-29 00:15:36 24 4
gpt4 key购买 nike

我在我的数据库中的两列上添加了一个唯一键;

ALTER TABLE `foo`
ADD UNIQUE KEY `foo_uk` (`field1`, `field2`);

这工作正常,如果我尝试添加一行,而这两个字段的值已经存在于另一行中,我就会违反完整性约束。

但是,我无法让 Yii 拿起约束。

在我的模型中,我添加了一条规则;

public function rules()
{
return array(
...
array('field1', 'unique', 'criteria'=>array(
'condition'=>'`field2`=:field2',
'params'=>array(
':field2'=>$this->field2
)
),
...
);
}

当我保存模型并在验证期间执行以下查询时,我可以看到此规则正在运行:

SELECT 1 FROM `foo` `t` WHERE (`field2`=:field2) AND (`t`.`field1`=:ycp0) LIMIT 1

我已经通过在 mysql 中运行此命令进行了检查,它返回了正确的结果,当表为空时,它返回 0 组,当我尝试添加相同的行时,它返回 1.

但是,出于某种原因,它不会触发验证失败,而是抛出 CDbException:

CDbCommand failed to execute the SQL statement: SQLSTATE[23000]: Integrity
constraint violation: 1062 Duplicate entry 'field1TestData-field2TestData' for
key 'foo_uk'. The SQL statement executed was: INSERT INTO `foo` (`field1`,
`field2`...etc) VALUES (:yp0, :yp1...etc)

我希望在保存发生之前的验证能够优雅地抛出错误,并使用正确的错误消息将我带回表单('field1' 和 'field2' 必须是唯一的 或任何它会是)?

请有人能为我指出正确的方向,说明这里发生了什么。我是否需要创建自己的验证方法,我在这里假设 Yii 应该处理验证错误,因为它在模型的规则方法中?

最佳答案

可能这个扩展会帮助你:unique-attributes-validator

从扩展页面:

Yii comes with bucket of validators including a unique validator which validates whether an attribute value is unique in the corresponding database table. But what if your database unique constraint contains more than one attribute?

这就是我在我的项目中使用的。

举个例子

public function rules() {
return array(
array('firstKey', 'UniqueAttributesValidator', 'with'=>'secondKey'),
);
}

关于php - Yii 不验证 2 列的唯一索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23084249/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com