0

我在一个 Result 类中有几个桥,它们与另一个Result 类有关系。例如,在Text类中,我有几个到User类的桥梁。因此,默认情况下它们将被命名为usersusers_2s 之类的名称。我可以使用 rel_name_map 选项重新映射这些名称,但问题是这些命名背后是否有任何语义?如何决定哪一个命名为users哪一个命名为users_2s?也许如果我在另一台机器上以另一个顺序创建表,关系将以另一个顺序命名,用户将成为users_2s反之亦然?如果我使用 rel_name_map 并决定重命名它们,我可以确定订单将始终保留吗?

4

1 回答 1

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- 它与您的网桥名称不匹配,因此您的代码必须从数据库中获取这些名称。

于 2015-01-28T15:53:32.633 回答