Doctrine ORM:像另一个一样创建表

Posted

技术标签:

【中文标题】Doctrine ORM:像另一个一样创建表【英文标题】:Doctrine ORM: Create Table Like Another 【发布时间】:2009-11-04 16:56:49 【问题描述】:

在使用 Doctrine 时,有什么方法可以创建一个像另一个表一样的表吗?我知道在 mysql 中有一个函数可以这样做:

CREATE TABLE user2 LIKE user;

并且表 user 和 user2 将是相同的。这可以在 Doctrine 中完成吗?

【问题讨论】:

我什至不知道这在 MySQL 中是可能的。谢谢你的问题:-) 【参考方案1】:

我想您正在寻找的是在生成模型时定义(让我们使用您的示例)在架构级别user2user 继承。您可以通过使用 is described in the documentation 的教义 concrete 继承来做到这一点。

所以,在你的schema.yml

User:
  columns:
    name: string

User2:
  inheritance:
    extends: User
    type: concrete
  columns:
    something: int

这样user2 将成为一个单独的表并包含与先前在user 中定义的相同的列(“名称”)。我不确定您为什么想要两个 相同 表,但使用上述方法绝对可以。

【讨论】:

这可能是这个问题的最佳解决方案...谢谢!【参考方案2】:

我认为没有。 :(

您可以像这里 http://www.doctrine-project.org/documentation/cookbook/1_1/en/plug-and-play-schema-information-with-templates 一样从模板创建表格或使用 Doctrine_RawSql。

【讨论】:

【参考方案3】:

Doctrine 为此提供了一个简单的方法:Doctrine_Record::copy()。

  $copy = $user->copy();

请注意,使用 copy() 复制记录会返回一条新记录(状态 TDIRTY),其 旧记录的值,并复制该记录的关系。如果不想复制 关系也是,你需要使用copy(false)。

获取没有关系的用户副本

$copy = $user->copy(false);

【讨论】:

以上是关于Doctrine ORM:像另一个一样创建表的主要内容,如果未能解决你的问题,请参考以下文章

Zend/Doctrine 不能执行 ORM 操作,表已经存在

Doctrine2 ORM 访问多对多连接表

如何通过 SonataAdminBundle (Symfony) 管理 Doctrine ORM 类表继承?

Doctrine DBAL 可以与 ORM Query Builder 混合使用吗?

使用Doctrine2加入表中的鉴别器

带有模式注释的 Doctrine ORM 表