2 つの異なるエンティティにタグを追加するためのソリューションに取り組んでいます。フロントエンドでデータを簡単に取得するために、Tag_Mapping という名前の joinTable を次のように作成しました。
class TagMapping
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Tag", inversedBy="tags")
*/
private $tag;
/**
* @ORM\ManyToOne(targetEntity="Feed", inversedBy="tags")
*/
private $feed;
/**
* @ORM\ManyToOne(targetEntity="Question", inversedBy="tags")
*/
private $question;
...
}
タグエンティティ:
class Tag
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="title", type="string", length=255, unique=true)
*/
private $name;
/**
* @Gedmo\Slug(fields={"name"})
* @ORM\Column(unique=true)
*/
private $slug;
/**
* @ORM\OneToMany(targetEntity="TagMapping", mappedBy="tag", cascade="remove")
*/
private $tags;
...
}
そして、他の両方のエンティティ(フィードと質問)で、このようにTagMappingエンティティを参照しました
...
/**
* @ORM\ManyToMany(targetEntity="Tag")
* @JoinTable(name="tag_mapping",
* joinColumns={@JoinColumn(name="feed_id", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="tag_id", referencedColumnName="id")}
* )
*/
private $tags;
...
私が直面している問題は、実行しようとするとエラーが表示されるため、有効な方法ではないということです。
php app/console doctrine:schema:update --force
tag_mapping テーブルが既に存在すると言っています。リレーションごとに1つではなく、1つのjoinTableのみを使用してそれを行う方法を知っていますか?
ありがとう。