唯一密钥对的推进验证

问题描述:

在我的数据库中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。有没有可能通过一列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上)如果没有配置它忽略重复的插入。