SQLSTATE [23000]: нарушение ограничения целостности: 1062 Повторяющаяся запись в Symfony 4 - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть таблица с именем '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 , которое не может быть переназначено.Когда я переназначаю ' Assigment 3 ' дважды студенту, мне выдается ошибка:

Ошибка:

SQLSTATE [23000]: нарушение ограничения целостности: 1062 Duplicateзапись '2-3' для ключа 'assignment_unique'

Я хочу решение, в котором могут быть назначены те ученики, у которых нет Назначения № 3, и те, у кого есть это назначение, должны игнорироваться.

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019

Полагаю, вы извлекаете эти данные из базы данных как ArrayCollection объект. Я предлагаю вам убедиться, что 2 не связан с 2, прежде чем добавлять их в свою базу данных. Если это невозможно, я предлагаю пересмотреть вашу модель (отношения между вашими сущностями).

0 голосов
/ 23 апреля 2019

Как сказал @Shady в комментариях, вы должны использовать ограничение UniqueEntity.Вы можете использовать это на нескольких полях и комбинациях.Например, в вашем случае вы должны использовать его следующим образом:

<constraint name="Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity">
    <option name="fields">
        <value>fieldOne</value>
        <value>fieldTwo</value>
    </option>
</constraint>

Примечание. В первом поле будут отображаться ошибки, если они есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...