rezzza/doctrine-schema-multi-mapping

允许在定义多映射时使用 doctrine 模式命令。

dev-master / 1.0.x-dev 2015-10-06 14:07 UTC

This package is not auto-updated.

Last update: 2024-09-14 16:18:46 UTC


README

在 Symfony 上的安装

AppKernel 中激活捆绑包

    if (in_array($this->getEnvironment(), array('test'))) {
        $bundles[] = new Rezzza\DoctrineSchemaMultiMapping\App\Bundle\DoctrineSchemaMultiMappingBundle();
    }

使用方法

./app/console rezzza:doctrine-multi-mapping:schema:create --em=default  --env=test
./app/console rezzza:doctrine-multi-mapping:schema:update --em=default  --env=test
./app/console rezzza:doctrine-multi-mapping:schema:drop --em=default  --env=test

你应该考虑不要在生产环境中使用此捆绑包.

为什么使用它?

在 Doctrine2 中,如果你为同一实体定义多个映射,那么 doctrine:schema:* 命令将失败,因为它将尝试创建两个具有相同名称的 SQL 表,而不是从各个角度组合表示同一实体的所有实体映射。

示例:Acme 电子商务应用程序具有许多 User 实体

我们希望在不同的边界上下文中表达 User 模型。

Account 边界上下文中 User 实体的定义

我们有一个 \Acme\User\Account\User.php 实体。

在这个边界上下文中,我们需要管理用户身份验证和登录,因此一个(简单)映射可以是

    - id
    - username
    - password
    - first_name
    - last_name

Cart 边界上下文中 User 实体的定义

我们有一个 \Acme\User\Cart\User.php 实体。

在这个边界上下文中,我们不需要担心身份验证问题,我们只需要知道用户的电子商务相关信息。

    - id
    - first_name
    - last_name
    - is_first_order

这种类型的应用程序在你的生产环境中可以使用共享数据库,并且你需要手动定义迁移

在这个示例中,Doctrine 将两次定义 user 表,并抛出异常。

此库仅将两个实体映射合并,用于 doctrine:schema:* 命令.

此捆绑包通过这种方式提供了 3 个命令,以替换 doctrine:schema:* 命令,您必须将命名空间替换为 rezzza:doctrine-multi-mapping:schema:*

哪些 Doctrine 映射功能不受支持?

目前,仅支持继承类型“none”和“single_table”,您可以自由地提交 PR 以支持其他类型。