【问题标题】:DBIx::Class::Schema::Loader customizationDBIx::Class::Schema::Loader 自定义
【发布时间】:2018-07-09 17:03:42
【问题描述】:

我们有一个 MyISAM DB(不要问我为什么不切换到 InnoDB,它不是由我控制的)。

现在我希望DBIx::Class::Schema::Loader*ID 列创建关系,添加s 以获取表名。例如,Order.SeanceID 应该将表 Order 与表 Seances 关联起来。

DBIx::Class::Schema::Loader 可以被黑客入侵吗?还是自己写一个Loader更好?

【问题讨论】:

  • 您是否打算经常更改架构?你有很多桌子吗?在加载类之后添加一次关系是否没有意义?如果您将它们添加到校验和下方,它们会一直存在,以防您确实需要重新创建。
  • @simbabque 类应该作为 Perl 文件转储。架构更改但可能不会经常更改。我们真的有很多桌子。我希望自动生成适合我问题中方案的关系,但我还想编写具有更多关系和更多其他属性的派生类。我不明白您所说的“校验和”是什么意思。我正在等待对我的问题的答复:我们可以为此使用DBIx::Class::Schema::Loader 还是我需要创建自己的加载器。
  • 如果您查看 D::C::S::L 吐出的自动生成代码,您会看到代码下方有一个部分可以放置自定义代码。如果您重新运行加载程序,它将保留该自定义代码。如果您更改以上任何内容,校验和将不匹配并且将中止。 // 我不知道你是否可以不做研究就做你想做的事。

标签: database-schema dbix-class perl


【解决方案1】:

不用担心“破解” DBIx::Class::Schema::Loader 来处理这个问题。只需生成类,然后手动添加关系。

您使用 DBIx::Class::Schema::Loader 生成的每个类都将在底部包含如下所示的文本:

# Created by DBIx::Class::Schema::Loader v0.07043 @ 2018-07-09 09:56:55
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:6//4n3Crnz9U/q6GZ0Fwtg

# You can replace this text with custom code or comments, and it will be preserved on regeneration

正如最后一条评论所说,如果您重新生成类,您在此文本下方的文件中插入的任何内容都将被保留。因此,您可以安全地将关系信息手动添加到文件的这一部分,并且知道下次重新生成类时它仍然存在。

不要忘记,您需要添加关系的双方 - 例如父表中的 has_many 关系和关联子表中的倒数 belongs_to 关系。

【讨论】:

    猜你喜欢
    • 2011-07-09
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多