我从另一个团队继承了一个项目,似乎无法对数据库做任何事情。我总是n00b与zend&学说,但ORM工具似乎很简单;但是,在尝试使用它时,我会从orm:schema-tool:drop
,orm:schema-tool:create
,orm:schema-tool:update
等获得相同的错误。
[Doctrine\DBAL\Schema\SchemaException]
The table with name 'mydb.alerts_residents' already exists.
我的数据库已创建但没有表格。我读过的其他帖子让我得出结论,这条消息是基于我的Entity对象定义和注释。
正如您可能怀疑的那样,alerts_residents
是一个连接表,它将Alert
实体与Resident
实体以多对多关系连接起来。这些是引用此表的唯一实体,它们似乎正确地执行了此操作。
class Resident
{
/**
* @var ArrayCollection $zone
*
* @ORM\ManyToMany(targetEntity="Alert")
* @ORM\JoinTable(
* name="alerts_residents",
* joinColumns={@ORM\JoinColumn(name="resident_id", referencedColumnName="id", onDelete="CASCADE")},
* inverseJoinColumns={@ORM\JoinColumn(name="alert_id", referencedColumnName="id", onDelete="CASCADE")}
* )
*/
protected $alerts;
class Alert
{
/**
* @var ArrayCollection $zone
*
* @ORM\ManyToMany(targetEntity="Resident")
* @ORM\JoinTable(
* name="alerts_residents",
* joinColumns={@ORM\JoinColumn(name="alert_id", referencedColumnName="id", onDelete="CASCADE")},
* inverseJoinColumns={@ORM\JoinColumn(name="resident_id", referencedColumnName="id", onDelete="CASCADE")}
* )
*/
protected $residents;
没有@ORM\Table(name="alerts_residents")
的实体。为什么我会收到此错误?
答案 0 :(得分:1)
你已经多余地定义了多对多。 M2M关联有点奇怪,因为连接表没有自己的实体。因此,一方(或多或少)任意选择作为拥有方,并且这是获取连接表细节的实体。您的示例在两者上都有@ORM\JoinTable
注释。