У меня есть некоторый код, как это:Phalcon PHP: проверить уникальность на натуральном ключе?
$this->validate(new \Phalcon\Mvc\Model\Validator\Uniqueness(['field' => $field]));
if (true == $this->validationHasFailed()) {
throw new SpecialInternalUniqueException();
}
Это работает для всех столбцов для естественных первичных ключей, за исключением. То есть, Первичные ключи, которые не являются суррогатными ключами (автоинкрементные целые числа). Например, в таблице job_titles столбец естественного ключа - «job_title» - который в нашем случае относится к названию названия задания. Это имя должно быть уникальным, и я хочу иметь возможность проверить это в коде перед сохранением. Тем не менее, Фалкон счастливо его игнорирует.
Я на самом деле создание модульного тестирования для этого прямо сейчас, и делать что-то похожее на следующее:
$job_title = new JobTitles();
$job_title->job_title = 'Unique Test';
$job_title->description = 'Desc A';
$job_title->save();
$job_title2 = new JobTitles();
$job_title2->job_title = 'Unique Test';
$job_title->description = 'Desc B';
$job_title->save();
Исключение никогда не выкинут. То, что заканчивается в базе данных, - это один столбец для первого уникального теста с Desc A, и никакой записи для второго. Но я не получаю исключение.
Любые мысли?
EDIT:
Кроме того, я попытался с -> создать функцию() вместо функции сохранения().
Даже с помощью стратегии Introspection Database ничего не происходит, когда я пытаюсь добавить вторую запись с тем же естественным ключом. Как-то Фалкон не узнает его. –
Также - я был бы более чем счастлив, чтобы позволить Фалкону все это для меня. Однако есть ли способ определить и выбросить мои собственные исключения, когда проверка не выполняется на основании того, что это не так? –
Хм ... более того, если я не буду обрабатывать свою собственную проверку на такие вещи, как максимальная длина, Фалкон ничего не делает. Я просто попытался поместить что-то в БД, которая проходит мимо длины поля. Оба Phalcon и DB с радостью выполнили и засунули мои данные (усеченные) в столбец ... –