【问题标题】:Using custom table name in Symfony plugin sfDoctrineGuardPlugin?在 Symfony 插件 sfDoctrineGuardPlugin 中使用自定义表名?
【发布时间】:2011-01-20 01:13:03
【问题描述】:

我正在尝试在我的 Symfony 1.4 项目中使用sfDoctrineGuardPlugin。该插件包含一个 schema.yml 文件,用于定义所有涉及的表。表名采用以下形式:sf_guard_user、sf_guard_user_group、sf_guard_user_permission 等。我宁愿将这些表命名为:users、user_groups、user_permissions 等。有没有办法让我在不直接编辑插件代码的情况下做到这一点?

【问题讨论】:

    标签: authentication plugins symfony1 symfony-1.4 sfguard


    【解决方案1】:

    覆盖项目架构文件中的这些内容:

    sfGuardGroup:
      tableName: groups
    
    sfGuardPermission:
      tableName: permissions
    
    sfGuardGroupPermission:
      tableName: groups_permissions
    

    另外,我更愿意将它们移动到单独的文件中,例如 sfDoctinePlugin-schema.yml

    希望对您有所帮助。

    【讨论】:

    • 很好,这是一个覆盖插件设置的简单实现,谢谢!
    • 我发布了另一个与 sfDoctrineGuardPlugin 相关的问题,以防您像在这里一样对它有任何见解! stackoverflow.com/questions/4771313/…
    • 嗨@Matt,刚刚在那里发布了一个问题。
    【解决方案2】:

    这不是一个好习惯,我会劝阻你不要这样做。

    话虽如此(加粗,哈哈),您应该能够将包含的架构复制到您的项目级架构中,并将tableName 键添加到每个记录定义中。我知道以这种方式修改架构通常是有效的,因为我会定期向sfGuardUser 添加额外的列,而不是使用完整的配置文件类...我认为修改表名也可以。

    在构建数据库之后,您应该会看到您的表名。问题是,如果在实际插件代码中存在有人硬编码表名而不是使用模型中定义的别名的情况,则可能无法正常工作。我不知道有没有这样的情况,但你应该在继续项目之前彻底测试。

    【讨论】:

    • 为什么它不被认为是好的做法?在实现之后命名一个表(可能会改变)而不是命名它以反映它实际代表的内容(这不太可能改变)不是更糟糕的做法吗?
    • 也许... IMO...当使用基于 Active Record 的 ORM 时,尤其是使用某种构建系统的 ORM 时,表与模型名称直接相关更重要,这样您就知道什么表属于什么型号一目了然。在我看来,在这种情况下,使表名不可知是一种更糟糕的做法,因为表直接与模型相关联。如果您切换模型实现,那么您很可能必须迁移支持它的数据库模式以及所有相关模型,因此重命名表将是我最不担心的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    相关资源
    最近更新 更多