为什么 DBIx::Class::Schema::Loader 将我的表名从复数更改为单数?

raj*_*eev 2 mysql perl dbix-class

我正在使用DBIx::Class::Schema::Loader创建这样的架构:

#!/usr/bin/perl

use strict;
use warnings;

use DBIx::Class::Schema::Loader qw/make_schema_at/;

make_schema_at(
    "Mydb::Schema",
    {debug => 0, dump_directory => "../db/",
    generate_pod => 0,},
    ["dbi:mysql:mydb:localhost:3306", 'mydb', 'password'],
);
Run Code Online (Sandbox Code Playgroud)

我在 MySQL 中的表名是people,但是当我运行此代码时,生成的类名为Mydb::Schema::Result::Person

$ cat Mydb/Schema/Result/Person.pm 
use utf8;
package Mydb::Schema::Result::Person;

# Created by DBIx::Class::Schema::Loader
# DO NOT MODIFY THE FIRST PART OF THIS FILE

use strict;
use warnings;

use base 'DBIx::Class::Core';
__PACKAGE__->table("people");
__PACKAGE__->add_columns(
  "pplid",
  {
    data_type => "smallint",
    extra => { unsigned => 1 },
    is_auto_increment => 1,
    is_nullable => 0,
  },
...
...
Run Code Online (Sandbox Code Playgroud)

为什么“人”要改成“人”?

Thi*_*Not 5

默认情况下,DBIx::Class::Schema::Loader 将 Result 类的名称单数化。拥有一个人的数据库表是有意义的,但是拥有一个代表一个名为“人”的人的对象是没有意义的。

如果你真的想要,你可以通过设置naming选项来改变它make_schema_at

make_schema_at(
    "Mydb::Schema",
    {
        debug          => 0,
        dump_directory => "../db/",
        generate_pod   => 0,
        naming         => { monikers => 'preserve' }
    },
    ["dbi:mysql:mydb:localhost:3306", 'mydb', 'password'],
);
Run Code Online (Sandbox Code Playgroud)

但我建议坚持使用默认值。