我在一个Result类中有几个桥,它们与相同的另一个 Result类有关系。例如,在文本类中,我有几个桥梁连接到用户类。 那么,默认情况下,它们会被命名为用户和 users_2s 。我可以使用rel_name_map选项重新映射这些名称,但问题是这些命名背后是否有任何语义?如何确定哪个名称用户哪个名称 users_2s ?也许如果我在另一台机器上以其他顺序创建表格,关系将以另一个顺序命名,用户将变为 users_2s ,反之亦然? 如果我使用rel_name_map并决定重命名它们,我可以确定订单将始终保留吗?
答案 0 :(得分:0)
简短回答:数据库已经有了桥的名称,DBIx :: Class将使用这些名称。因此,只要您不在运行之间更改数据库,就可以安全地在运行之间重命名它们。
如果使用正确的工具/命令查看数据库,您应该会看到已经与这些网桥关联的名称“users”和“user_2s”。每个“桥”都是外键约束,因此在源数据库模式中有一个名称。库函数DBIx::Class::Schema::Loader::DBI::_table_fk_info
调用DBD处理程序的foreign_key_info方法来获取桥,并使用给定的名称。
如果处理程序未返回外键名称,那么将使用以下格式生成新名称:__dcsld__$i
,其中$i
是一个从1.只有在数据库内架构发生变化时,编号才会改变。
dscld
代表DBIx::Class::Schema::Loader
- 它与您的网桥名称不匹配,因此您的代码必须从数据库中获取这些名称。