Zend / Doctrine无法执行ORM操作,表已经存在

时间:2015-03-02 21:16:03

标签: php mysql orm doctrine-orm zend-framework2

我从另一个团队继承了一个项目,似乎无法对数据库做任何事情。我总是n00b与zend&学说,但ORM工具似乎很简单;但是,在尝试使用它时,我会从orm:schema-tool:droporm:schema-tool:createorm: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")的实体。为什么我会收到此错误?

1 个答案:

答案 0 :(得分:1)

你已经多余地定义了多对多。 M2M关联有点奇怪,因为连接表没有自己的实体。因此,一方(或多或少)任意选择作为拥有方,并且这是获取连接表细节的实体。您的示例在两者上都有@ORM\JoinTable注释。

请参阅http://doctrine-orm.readthedocs.org/en/latest/reference/association-mapping.html#owning-and-inverse-side-on-a-manytomany-association