双向关系ManyToMany symfony

时间:2018-10-12 19:32:03

标签: php symfony doctrine

我的问题需要帮助。 将关系ManyToMany添加到php脚本时,验证关系时会返回。 这是我的脚本:

   class Post implements ResourceInterface, TranslatableInterface
{
    /**
     * @var int
     */
    private $id;

    /**
     * @var bool
     */
    private $important;
    /**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\ManyToMany(targetEntity="AppBundle\Entity\Tag", inversedBy="posts")
     * @ORM\JoinTable(name="posts_tags",
     *   joinColumns={
     *     @ORM\JoinColumn(name="post_id", referencedColumnName="id", onDelete="CASCADE")
     *   },
     *   inverseJoinColumns={
     *     @ORM\JoinColumn(name="tag_id", referencedColumnName="id")
     *   }
     * )
     */
    private $tags;
}

class Tag implements ResourceInterface, TranslatableInterface
{
    use TranslatableTrait {
        __construct as private initializeTranslationsCollection;
    }

    /**
     * @var int
     */
    private $id;

    /**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\ManyToMany(targetEntity="AppBundle\Entity\Post", 
    mappedBy="tags")
     */
    private $posts;
}

错误是:

映射

  

[FAIL]实体类AppBundle \ Entity \ Tag映射无效:*   字段AppBundle \ Entity \ Tag#posts位于bi-
的反面上   方向关系,但指定的mapBy关联在   目标实体AppBundle \ Entity \ Post#tags不包含   必需的'inversedBy =“ posts”'属性。

2 个答案:

答案 0 :(得分:0)

你好使用symfony maker

。 / bin / console make:实体发布

对于字段名称,输入'tags',对于类型,输入'relation'。然后给出相关标签的实体名称。应该是Tag。选择多对多关系并输入。这样,您就永远不会有关系问题:-)。即使该实体已经存在。

答案 1 :(得分:0)

也许post实体中标签属性的映射应该是这样的:

class Post implements ResourceInterface, TranslatableInterface
{
    /**
     * @var int
     */
    private $id;

    /**
     * @var bool
     */
    private $important;
    /**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\ManyToMany(targetEntity="AppBundle\Entity\Tag", inversedBy="posts", cascade={"persist"})
     * @ORM\JoinTable(name="posts_tags",
     *   joinColumns={
     *     @ORM\JoinColumn(name="post_id", referencedColumnName="id")
     *   },
     *   inverseJoinColumns={
     *     @ORM\JoinColumn(name="tag_id", referencedColumnName="id")
     *   }
     * )
     */
    private $tags;
}

我希望我有所帮助:)