0

在我的数据库中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数组?任何建议都将是可观的。谢谢你 。

4

1 回答 1

2

此功能尚不可用,但您有几个选择:

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.通过以下方式处理底层重复数据库的INSERT INTO违规行为try-catch

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

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

于 2016-06-29T10:42:53.953 回答