【问题标题】:Propel validation for unique key pair推动唯一密钥对的验证
【发布时间】:2016-06-13 00:25:35
【问题描述】:

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

【问题讨论】:

    标签: php orm propel propel2


    【解决方案1】:

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

    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 上)。

    【讨论】:

      猜你喜欢
      • 2011-06-04
      • 2015-05-19
      • 1970-01-01
      • 2011-05-23
      • 2014-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多