2012-03-16 13 views
0

私はSymfony2プロジェクトでORMとしてDoctrine2を使用します。私はarticletagのエンティティクラスを持っています。それらの間に多対多の関係があります。物品には多くのタグがあり、その逆もあります。ジョイントされたテーブルarticle_tagsは、2つのカラムarticle_idtag_idを持ち、doctrineによって生成されたものです。いくつかのタグを含む新しい記事が追加されたときは、新しいタグと既存のタグが両方ともtagのテーブルに挿入されます。ユニークなタグのみを格納します; article_tagsはそれらを関連付けるだけです。多対多関係のユニークなデータ

記事のマイ・スキーマ:関係があるはずですので、

manyToMany: 
    tags: 
     targetEntity: Tag 
     cascade: ["persist"] 
     joinTable: 
    name: article_tag 
    joinColumns: 
     article_id: 
     referencedColumnName: id 
    inverseJoinColumns: 
     tag_id: 
     referencedColumnName: id 

tagに独自の属性を追加し、重複を無視しては合理的ではありません。

Catchable Fatal Error: Argument 1 passed to Seferov\ArticleBundle\Entity\Article::addTag() must be an instance of Seferov\ArticleBundle\Entity\Tag, null given, called in /var/www/seferov.local/src/Seferov/ArticleBundle/Repository/TagRepository.php on line 34 and defined in /var/www/seferov.local/src/Seferov/ArticleBundle/Entity/Article.php line 393

+0

したがって、特定のオブジェクトインスタンスにnull値が必要な関数を渡しました。これはあなたの質問ですか?または、一意のデータを持つ方法を尋ねていますか? –

+0

私はユニークなデータを持ちたいと思っています。他は私が試みたものです。ユニークなデータ問題を解決する方法はありがたいです – seferov

答えて

0

あなたは基本的にタグが存在するかどうかを確認する必要があります。

$article->addTag($existingTag); 

それは次のエラーを与える:私は、タグがタグデータをフェッチし、記事に追加存在するかどうかを確認するロジックを追加しようとしました。それが使用する場合は、それを使用してください。作成しない場合は作成します。

public function loadOrg($orgId,$autoCreate = false) 
{ 
    $org = $this->getEntityManager()->find('ZaysoCoreBundle:Org',$orgId); 
    if ($org) return $org; 

    if (!$autoCreate) return null; 
    if (!$orgId)  return null; 

    $org = new Org(); 
    $org->setId($orgId); 
    $this->getEntityManager()->persist($org); 
    return $org; 
} 

タグ列を一意にして例外をキャッチするようにしてください。他のリクエストがfindとpersistの間に同じタグを挿入する可能性があります。

+0

私は問題を解決しました。ありがとうございました。 – seferov