2016-06-13 15 views
0

私のデータベースuser_groupテーブルUNIQUE_KEYは、2つのカラム、user_iduser_group_idで構成されています。これはPropelのスキーマでどのように見えるかです:ユニークなキーペアのPropel検証

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

それはおよそ1列であるならば、あなたは以下のような検証動作を設定することができます。

<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

私は間違っているかもしれませんが、私はこの機能がまだ利用可能ではないと思います。

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

関連する問題