#php #database #symfony #error-handling #doctrine
#php #База данных #symfony #обработка ошибок #доктрина
Вопрос:
У меня есть таблица с именем ‘student_assignment’, в которой у меня есть несколько столбцов, из которых я показываю 2 из них ниже:
Оба этих столбца также являются внешними ключами.
StudentId assignmentId
1 6 -> allowed
2 3 -> allowed
3 1 -> allowed
2 3 -> not allowed, the combination of 2 3 already exists in table.
Я успешно скомбинировал эти два столбца.
Я использую множественный выбор, чтобы назначить задание, скажем, «Задание № 3» нескольким учащимся. У этих студентов уже есть задание 3, которое нельзя переназначить. Когда я дважды переназначаю ‘Назначение 3‘ студенту, это выдает мне ошибку:
Ошибка:
SQLSTATE[23000]: Нарушение ограничения целостности: 1062 повторяющихся записи ‘2-3’ для ключа ‘assignment_unique’
Я хочу решение, в котором тем учащимся, у которых нет задания № 3, может быть назначено, а те, у кого есть эти назначения, должны быть проигнорированы.
Комментарии:
1. Взгляните на документацию по ограничению уникальности
2. @Shady: У меня есть, но спасибо за предложение.
3. С какой проблемой вы столкнулись, когда посмотрели на эту штуку, @Saurabh?
Ответ №1:
Как сказал @Shady в комментариях, вы должны использовать ограничение UniqueEntity. Вы можете использовать это для нескольких полей и комбинаций. Например, в вашем случае вы должны использовать его следующим образом:
<constraint name="SymfonyBridgeDoctrineValidatorConstraintsUniqueEntity">
<option name="fields">
<value>fieldOne</value>
<value>fieldTwo</value>
</option>
</constraint>
Примечание: В первом поле будут показаны ошибки, если таковые имеются.
Ответ №2:
Я полагаю, вы извлекаете эти данные из базы данных как объект ArrayCollection. Я предлагаю вам убедиться, что 2 не связано с 2, прежде чем добавлять их в свою базу данных. Если это невозможно, я предлагаю пересмотреть вашу модель (отношения между вашими объектами).