【问题标题】:how to deal with doctrine updates on case insensitive file systems(?)如何处理不区分大小写的文件系统的学说更新(?)
【发布时间】:2014-05-12 20:01:19
【问题描述】:

我对教义更新有疑问。添加新表时,表名默认为类名(大写)'class Foo',创建的表为'Foo'。如果您更改 Foo,例如添加或删除属性,则在更新时,表将重命名为 'foo'。

针对此问题提交了一个错误:http://www.doctrine-project.org/jira/browse/DBAL-598

问题是当我将 db 导出并发布到基于 linux 的系统时(从 mac-os 导出时),我必须手动编辑导出文件以修复 db 表。

特别是我的问题是,有没有人想出一种合理的自动化方式来清理表名?

【问题讨论】:

    标签: php doctrine-orm


    【解决方案1】:

    在实体定义中只需将表名定义为小写即可,例如:

    YAML:

    # Doctrine.Tests.ORM.Mapping.User.dcm.yml
    Doctrine\Tests\ORM\Mapping\User:
        type: entity
        table: cms_users
    

    XML:

    // Doctrine.Tests.ORM.Mapping.User.dcm.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
                              http://www.doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
    
        <entity name="Doctrine\Tests\ORM\Mapping\User" table="cms_users">
    

    注释:

    <?php
    /**
     * @Entity
     * @Table(name="user")
     */
    class User { }
    

    这样可以确保在不同文件系统上的架构更新期间没有任何问题。

    【讨论】:

    • 是的,我想保持小写更容易。如果它是大写的会更好,但你是对的。嗯。我将不得不尝试它,b/c 在我的 Mac 上它可能不会将这种情况视为改变。
    • 已确认。 MacOS 它不认为这是一个变化。
    • @user3325313 如果它有帮助,如果你愿意accept the answer(也许还有upvote it)会很好。由于您似乎是 SO 的新用户,我会向您推荐 the tour。 ;-)
    • 我不接受这个答案,因为它不能解决我的问题,而且我没有足够的声誉来投票。虽然答案解决了 new 表的问题,但无法更新现有表以反映表的情况。我不得不使用文本编辑器修改导出,这很笨拙。
    • @user3325313 好吧,您总是可以使用migration 并编写简单的 SQL 来修复现有项目中的表名。另一种方法是使用例如phpMyAdmin(或其他一些工具)也可以正常重命名表。如果这对你有用,我可以相应地更新答案。
    猜你喜欢
    • 1970-01-01
    • 2012-03-24
    • 2020-01-16
    • 2020-03-09
    • 2023-04-09
    • 2010-11-20
    • 1970-01-01
    • 2015-12-15
    • 1970-01-01
    相关资源
    最近更新 更多