2016-06-13 3 views
0

В моей базе user_group стол UNIQUE_KEY состоит из двух столбцов: user_id и user_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_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. Ручка, лежащие в основе дублировать нарушение Базы данных в INSERT INTO через try-catch:

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

Вариант 2 может быть меньше painfu l если производительность является проблемой, так как она сохраняет запрос, но может увеличить ваш auto_increment (особенно. на MySQL), если они не настроили его на игнорирование дубликатов вставок.

Смежные вопросы