所以,我有两个实体:Genre
和Game
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:create
或update
时,它会创建我在上面指定的所有必需的联接表,但它也会创建 genre_genre
这个表总是空的,似乎什么也没做,并阻止我以后运行php app/console doctrine:schema:update
,并试图为它添加一个已存在的索引
任何人都能看到我做错了什么?
答案 0 :(得分:1)
Game-&gt;类型和流派游戏彼此反转,这是无效的 - 一个人需要拥有。我相信有一个doctine:schema:validate命令,你会发现它很有用。
答案 1 :(得分:0)
先生,我认为你在那些映射类中已经建立了多对多关系(双向)。根据{{3}},将为示例中的Game
和Genre
之间的关系创建该表。
您可以创建db表,然后创建mapper类以与doctrine documentation进行验证。这样您就可以验证架构和映射。