В моей базе группа пользователей таблица 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 ?? Любые предложения будут заметны. Спасибо .
Я могу ошибаться, но я не думаю, что эта функция еще доступна.
У вас есть несколько вариантов:
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), если вы не настроили его на игнорирование повторяющихся вставок.
Других решений пока нет …