Проверка Propel для уникальной пары ключей

В моей базе группа пользователей таблица UNIQUE_KEY состоит из двух столбцов, user_id а также user_group_id, Вот как это выглядит в схеме Propel:

<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 ?? Любые предложения будут заметны. Спасибо .

0

Решение

Я могу ошибаться, но я не думаю, что эта функция еще доступна.

У вас есть несколько вариантов:

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), если вы не настроили его на игнорирование повторяющихся вставок.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]