2016-06-13 2 views
0

내 데이터베이스 user_group 테이블 UNIQUE_KEY는 두 개의 열, user_iduser_group_id로 구성됩니다. 내가 알고 싶어 독특한 설정하는 방법입니다 그래서고유 키 쌍에 대한 Propel 유효성 확인

<behavior name="validate"> 
    <parameter name="rule1" 
    value="{column: column_name, validator: Unique, options {message:Your validation message here.}}"/> 
</behavior> 

:이 약 열이 다음 검증 동작을 아래와 같이 설정할 수 있습니다 경우

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

: 이것은 추진 스키마와 같은 모습입니다 키 쌍 user_iduser_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가 증가 할 수 있습니다 (특히 중복 삽입을 무시하도록 구성하지 않은 경우).

관련 문제