Symfony 3关系不适用于更新--force

时间:2016-11-05 11:17:53

标签: symfony doctrine relation

所以,我的问题是当我尝试使用命令" dotrine:schema:update --force"来更新模式时,实体是创建但没有任何关系。

我有两个实体"广告"和"类别"以及关于广告实体的ManyToMany关系。

这是一个很好的广告:

<?php

namespace testBundle\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;

/**
 * Advert
 *
 * @ORM\Table(name="advert")
 * @ORM\Entity(repositoryClass="testBundle\Repository\AdvertRepository")
 */
class Advert
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
    * @var string
     *
     * @ORM\Column(name="categories", type="string", length=255)
     * /**

 * @ORM\ManyToMany(targetEntity="OC\PlatformBundle\Entity\Category", cascade={"persist"})

 */
    private $categories;

    public function __construct()

    {

        $this->date       = new \Datetime();

        $this->categories = new ArrayCollection();


    }


    // Notez le singulier, on ajoute une seule catégorie à la fois

    public function addCategory(Category $category)

    {

    // Ici, on utilise l'ArrayCollection vraiment comme un tableau

        $this->categories[] = $category;

    }


    public function removeCategory(Category $category)

    {

        // Ici on utilise une méthode de l'ArrayCollection, pour supprimer la catégorie en argument

        $this->categories->removeElement($category);

    }
    /**
     * Get id
     *
     * @return int
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set categories
     *
     * @param string $categories
     *
     * @return Advert
     */
    public function setCategories($categories)
    {
        $this->categories = $categories;

        return $this;
    }

    /**
     * Get categories
     *
     * @return string
     */
    public function getCategories()
    {
        return $this->categories;
    }
}

我的实体类别:

<?php

namespace testBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Category
 *
 * @ORM\Table(name="category")
 * @ORM\Entity(repositoryClass="testBundle\Repository\CategoryRepository")
 */
class Category
{
/**
 * @var int
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var string
 *
 * @ORM\Column(name="name", type="string", length=255)
 */
private $name;


/**
 * Get id
 *
 * @return int
 */
public function getId()
{
    return $this->id;
}

/**
 * Set name
 *
 * @param string $name
 *
 * @return Category
 */
public function setName($name)
{
    $this->name = $name;

    return $this;
}

/**
 * Get name
 *
 * @return string
 */
public function getName()
{
    return $this->name;
}
}

这是命令doctrine的结果:schema:update --force --dump-sql:

CREATE TABLE advert (id INT AUTO_INCREMENT NOT NULL, categories VARCHAR(255) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
CREATE TABLE category (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;

就像你看到的那样,没有关系,也没有表advert_category

我找到了一些关于此的话题但没有解决方案适合我。

我希望有人可以帮助我

谢谢!

2 个答案:

答案 0 :(得分:1)

关系声明错误,我认为它应该是这样的:

/**
 * @ORM\ManyToMany(targetEntity="testBundle\Entity\Category")
 * @ORM\JoinTable(name="advert_category")
 */
private $categories;

答案 1 :(得分:0)

问题解决了,我必须删除它:

 *
 * @ORM\Column(name="categories", type="string", length=255)
/**

它的工作,谢谢@thomas!