Doctrine \ DBAL \ Exception \ UniqueConstraintViolationException пытается выполнить вставку с использованием наследования таблиц в доктрине 2 - PullRequest
1 голос
/ 25 марта 2019

Я пытаюсь внести новые данные в эти таблицы (используя наследование):

Entity\AbstractSurveyAnswer:
    type: entity
    table: survey_answers
    inheritanceType: JOINED
    discriminatorColumn:
        name: type_class
        type: string
    discriminatorMap:
        database: SurveyDatabaseAnswer
        client_text: SurveyClientTextAnswer
        client_number: SurveyClientNumberAnswer
        client_date: SurveyClientDateAnswer

    id:
        id:
            type: integer
            generator:
                strategy: AUTO

    manyToOne:
        client:
            targetEntity: Entity\Client
            joinColumn:
                name: id_client
                nullable: false
                referenceColumnName: id

        survey:
            targetEntity: Entity\AbstractSurvey
            joinColumn:
                name: id_survey
                nullable: false
                referenceColumnName: id

и

Entity\SurveyDatabaseAnswer:
    type: entity
    table: survey_database_answers

    indexes:
        id:
            columns: [id, id_answer]

    manyToOne:
        answer:
            targetEntity: Entity\Answer
            joinColumn:
                name: id_answer
                nullable: false
                referenceColumnName: id

Я обновляю таблицы таким образом, и это работает (имеетнекоторый опущенный код и некоторые функции доктрины, такие как flush, инкапсулированы в другие классы)

$updated_answer = new SurveyDatabaseAnswer();
$updated_answer->setId($result[0]);
$updated_answer->setClient($client);
$updated_answer->setSurvey($survey);
$updated_answer->setAnswer($answer);
$storage->merge($updated_answer);
$storage->flush();

, но если я пытаюсь вставить новую строку

$updated_answer = new SurveyDatabaseAnswer();
$updated_answer->setClient($client);
$updated_answer->setSurvey($survey);
$updated_answer->setAnswer($answer);
$storage->persist($updated_answer);
$storage->flush();

Я получаю эту ошибку, доктрина пытаетсявставить и существующий идентификатор

Type: Doctrine\DBAL\Exception\UniqueConstraintViolationException

Message: An exception occurred while executing 'INSERT INTO survey_database_answers (id, id_answer) VALUES (?, ?)' with params [7438572, 1888]: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '7438572' for key 'PRIMARY'

Я что-то не так делаю в доктрине?

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