许多许多关系未被确认


Symfony2 Doctrine ManyToMany relationship not reconized

我正在尝试创建一个多对多关系。下面是代码:

Article.php

namespace Heitor'ProjetoBundle'Entity;
use Doctrine'ORM'Mapping as ORM;
/**
 * Article
 *
 * @ORM'Table()
 * @ORM'Entity
 */
class Article
{
    /**
     * @var integer
     *
     * @ORM'Column(name="id", type="integer")
     * @ORM'Id
     * @ORM'GeneratedValue(strategy="AUTO")
     */
    protected $id;
    /**
     * @var string
     *
     * @ORM'Column(name="title", type="string", length=255)
     */
    protected $title;
    /**
     * @var string
     *
     * @ORM'Column(name="text", type="text")
     */
    protected $text;
    /**
     * @ORM'ManyToOne(targetEntity="Author", inversedBy="articles")
     */
    protected $author;
    /*
     * @ORM'ManyToMany(targetEntity="Tag", inversedBy="articles")
     * @ORM'JoinTable(name="articles_tags")
     */
    protected $tags;
    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }
    /**
     * Set title
     *
     * @param string $title
     * @return Article
     */
    public function setTitle($title)
    {
        $this->title = $title;
        return $this;
    }
    /**
     * Get title
     *
     * @return string 
     */
    public function getTitle()
    {
        return $this->title;
    }
    /**
     * Set text
     *
     *
     * @param string $text
     * @return Article
     */
    public function setText($text)
    {
        $this->text = $text;
        return $this;
    }
    /**
     * Get text
     *
     * @return string 
     */
    public function getText()
    {
        return $this->text;
    }
    /**
     * Set author
     *
     * @param 'Heitor'ProjetoBundle'Entity'Author $author
     * @return Article
     */
    public function setAuthor('Heitor'ProjetoBundle'Entity'Author $author = null)
    {
        $this->author = $author;
        return $this;
    }
    /**
     * Get author
     *
     * @return 'Heitor'ProjetoBundle'Entity'Author 
     */
    public function getAuthor()
    {
        return $this->author;
    }
}

Tag.php

namespace Heitor'ProjetoBundle'Entity;
use Doctrine'ORM'Mapping as ORM;
/**
 * Tag
 *
 * @ORM'Table()
 * @ORM'Entity
 */
class Tag
{
    /**
     * @var integer
     *
     * @ORM'Column(name="id", type="integer")
     * @ORM'Id
     * @ORM'GeneratedValue(strategy="AUTO")
     */
    protected $id;
    /**
     * @var string
     *
     * @ORM'Column(name="description", type="string", length=255)
     */
    protected $description;
    /**
     * @ORM'ManyToMany(targetEntity="Article", mappedBy="tags")
     */
    protected $articles;
    /**
     * Constructor
     */
    public function __construct()
    {
        $this->articles = new 'Doctrine'Common'Collections'ArrayCollection();
    }
    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }
    /**
     * Set description
     *
     * @param string $description
     * @return Tag
     */
    public function setDescription($description)
    {
        $this->description = $description;
        return $this;
    }
    /**
     * Get description
     *
     * @return string 
     */
    public function getDescription()
    {
        return $this->description;
    }
    /**
     * Add articles
     *
     * @param 'Heitor'ProjetoBundle'Entity'Article $articles
     * @return Tag
     */
    public function addArticle('Heitor'ProjetoBundle'Entity'Article $articles)
    {
        $this->articles[] = $articles;
        return $this;
    }
    /**
     * Remove articles
     *
     * @param 'Heitor'ProjetoBundle'Entity'Article $articles
     */
    public function removeArticle('Heitor'ProjetoBundle'Entity'Article $articles)
    {
        $this->articles->removeElement($articles);
    }
    /**
     * Get articles
     *
     * @return 'Doctrine'Common'Collections'Collection 
     */
    public function getArticles()
    {
        return $this->articles;
    }
}

每个类上的方法都是通过命令doctrine:generate:entites自动生成的,我只是事先做了属性和映射。

然后当我尝试用doctrine:schema:update --dump-sql创建表时,它不会尝试创建articles_tags关系:

CREATE TABLE Tag (id INT AUTO_INCREMENT NOT NULL, description VARCHAR(255) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
CREATE TABLE Author (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
CREATE TABLE Article (id INT AUTO_INCREMENT NOT NULL, author_id INT DEFAULT NULL, title VARCHAR(255) NOT NULL, text LONGTEXT NOT NULL, INDEX IDX_CD8737FAF675F31B (author_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
ALTER TABLE Article ADD CONSTRAINT FK_CD8737FAF675F31B FOREIGN KEY (author_id) REFERENCES Author (id);

为什么它不尝试创建addTag &等方法的文章。php?为什么它不尝试创建manymany joinTable?

您是否尝试过添加连接列?也许有帮助。

/**
 * @ORM'ManyToMany(targetEntity="Tag", inversedBy="articles")
 * @ORM'JoinTable(name="articles_tags",
 *      joinColumns={@JoinColumn(name="tag_id", referencedColumnName="id")},
 *      inverseJoinColumns={@JoinColumn(name="article_id", referencedColumnName="id")}
 *      )
 */
 protected $tags;

此外,似乎您后来添加了标签,忘记再次调用生成实体,因为我无法在代码中找到标签的getter和setter。试着再运行一次doctrine:generate:entites

最后,您是否检查过数据库中是否已经存在该表?(这应该是不可能的,但如果你没有任何其他想法,检查一下也无妨。)