Doctrine创建无用的连接表

时间:2013-12-29 23:16:46

标签: php symfony doctrine

所以,我有两个实体:GenreGame

Genre.php

<?php

namespace Acme\Bundle\DemoBundle\Entity;

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

/**
 * Genre
 *
 * @ORM\Table(name="genre")
 * @ORM\Entity
 */
class Genre
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    protected $id;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=64, nullable=false)
     */
    protected $name;

    /**
     * @var string
     *
     * @ORM\Column(name="display", type="string", length=64, nullable=false)
     */
    protected $display;

    /**
     * @var string
     *
     * @ORM\Column(name="description", type="text", nullable=false)
     */
    protected $description;

    /**
     * @var ArrayCollection|Game[]
     *
     * @ORM\ManyToMany(targetEntity="Game", inversedBy="genres", cascade={"persist"})
     */
    protected $games;

    // ... Irrelevant Constructor and following getters/setters
}

Game.php

<?php

namespace Acme\Bundle\DemoBundle\Entity;

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

/**
 * Game
 *
 * @ORM\Table(name="game")
 * @ORM\Entity
 */
class Game
{

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    protected $id;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=256, nullable=false)
     */
    protected $name;

    /**
     * @var string
     *
     * @ORM\Column(name="display", type="string", length=256, nullable=false)
     */
    protected $display;

    /**
     * @var string
     *
     * @ORM\Column(name="description", type="text", nullable=false)
     */
    protected $description;

    /**
     * @var ArrayCollection|Genre[]
     *
     * @ORM\ManyToMany(targetEntity="Genre", inversedBy="games", cascade={"persist"})
     * @ORM\JoinTable(name="genre_game",
     *    joinColumns={@ORM\JoinColumn(name="genre_id", referencedColumnName="id")},
     *    inverseJoinColumns={@ORM\JoinColumn(name="game_id", referencedColumnName="id")}
     *    )
     */
    protected $genres;

    /**
     * @var ArrayCollection|Platform[]
     *
     * @ORM\ManyToMany(targetEntity="Platform", inversedBy="games", cascade={"persist"})
     * @ORM\JoinTable(name="platform_game",
     *    joinColumns={@ORM\JoinColumn(name="platform_id", referencedColumnName="id")},
     *    inverseJoinColumns={@ORM\JoinColumn(name="game_id", referencedColumnName="id")}
     *    )
     */
    protected $platforms;

    /**
     * @var Image[]
     *
     * @ORM\OneToMany(targetEntity="Image",mappedBy="game_id", cascade={"persist"})
     */
    protected $images;
}

当我运行php app/console doctrine:schema:createupdate时,它会创建我在上面指定的所有必需的联接表,但它也会创建 genre_genre

这个表总是空的,似乎什么也没做,并阻止我以后运行php app/console doctrine:schema:update,并试图为它添加一个已存在的索引

任何人都能看到我做错了什么?

2 个答案:

答案 0 :(得分:1)

Game-&gt;类型和流派游戏彼此反转,这是无效的 - 一个人需要拥有。我相信有一个doctine:schema:validate命令,你会发现它很有用。

答案 1 :(得分:0)

先生,我认为你在那些映射类中已经建立了多对多关系(双向)。根据{{​​3}},将为示例中的GameGenre之间的关系创建该表。

您可以创建db表,然后创建mapper类以与doctrine documentation进行验证。这样您就可以验证架构和映射。