Я использую Doctrine2 в качестве ORM в проекте Symfony2. У меня есть article
и tag
классы сущностей. Между ними много-много-много отношений. Статья может иметь много тегов и наоборот. Существует объединенная таблица, article_tags
, которая имеет только 2 столбца article_id
и tag_id
и сгенерирована доктриной. Все работает нормально, за исключением того, что при добавлении новой статьи с некоторыми тегами новые и уже существующие теги вставляются в таблицу tag
, в которой я хочу хранить только уникальные теги ; article_tags
должен просто связать их.
Схема моей статьи:
manyToMany:
tags:
targetEntity: Tag
cascade: ["persist"]
joinTable:
name: article_tag
joinColumns:
article_id:
referencedColumnName: id
inverseJoinColumns:
tag_id:
referencedColumnName: id
Добавление уникального атрибута в tag
и игнорирование дубликатов нецелесообразно, поскольку должна быть связь. Я попытался добавить логику, которая проверяет, существует ли тег, получить данные тега и добавить его в статью:
$article->addTag($existingTag);
Выдает следующую ошибку:
Исправляемая фатальная ошибка: аргумент 1 передан
Seferov \ ArticleBundle \ Entity \ Article :: addTag () должен быть экземпляром
Сеферов \ ArticleBundle \ Entity \ Tag, дано ноль, вызывается в
/var/www/seferov.local/src/Seferov/ArticleBundle/Repository/TagRepository.php
в строке 34 и определяется в
/var/www/seferov.local/src/Seferov/ArticleBundle/Entity/Article.php
линия 393