推进唯一密钥对的验证



在我的数据库中user_group表UNIQUE_KEY由两列组成,user_iduser_group_id。这就是它在推进模式中的样子:

<unique name="UNIQUE_KEY">
<unique-column name="user_id"/>
<unique-column name="user_group_id"/>
</unique>

如果它是关于一列的,那么您可以设置如下验证行为:

<behavior name="validate">
<parameter name="rule1"
value="{column: column_name, validator: Unique, options {message:Your validation message here.}}"/>
</behavior>

所以我想知道的是如何为密钥对user_iduser_group_id设置唯一验证。是否有可能传递列名称的数组??任何建议都是值得赞赏的。非常感谢。

这些功能还不可用,但您有几个选项:

1.自己处理重复项:

// First check for a duplicate
$duplicates = TableAQuery::create()
->filterByKey1($key1)
->filterByKey2($key2)
->count();
if ($duplicates>0) {
throw new PropelException('Row already exists');
}
// No duplicate, add the new row

2.通过try-catch处理基础重复数据库的INSERT INTO冲突:

try{
$obj->save();
} catch (PropelException $e) {
if (stripos($e->getMessage(), ' duplicate key ') !== false) {
throw new PropelException('Row already exists');
}
}

如果性能是一个问题,选项2可能不会那么痛苦,因为它为您节省了一个查询,但如果没有将其配置为忽略重复插入,则可能会增加您的auto_increment(尤其是在MySQL上)。

最新更新