唯一密钥对的推进验证
问题描述:
在我的数据库中user_group表UNIQUE_KEY由两列user_id
和user_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_id
和user_group_id
。有没有可能通过一列column_names ??任何建议都是可观的。谢谢 。
答
我可能是错的,但我不认为这个功能可用。
你确实有几个选项:
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可能不太痛苦l如果性能是一个问题,因为它可以节省您的查询,但可能会增加您的auto_increment(尤其是,在MySQL上)如果没有配置它忽略重复的插入。