为什么 DBIx::Class::Schema::Loader 将我的 table 名字从复数改为单数?
Why does DBIx::Class::Schema::Loader change my table name from plural to singular?
我正在使用 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'],
);
我的table在MySQL中的名字是people
,但是当我运行这段代码时,生成的class名字是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,
},
...
...
为什么 "people" 被转换为 "Person"?
默认情况下,DBIx::Class::Schema::Loader 将结果 类 的名称单数化。拥有一个人的数据库 table 是有意义的,但是拥有一个代表一个名为 "People".
的人的对象是没有意义的
如果您确实需要,可以通过在 make_schema_at
中设置 naming
选项来更改它:
make_schema_at(
"Mydb::Schema",
{
debug => 0,
dump_directory => "../db/",
generate_pod => 0,
naming => { monikers => 'preserve' }
},
["dbi:mysql:mydb:localhost:3306", 'mydb', 'password'],
);
但我建议坚持使用默认设置。
我正在使用 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'],
);
我的table在MySQL中的名字是people
,但是当我运行这段代码时,生成的class名字是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,
},
...
...
为什么 "people" 被转换为 "Person"?
默认情况下,DBIx::Class::Schema::Loader 将结果 类 的名称单数化。拥有一个人的数据库 table 是有意义的,但是拥有一个代表一个名为 "People".
的人的对象是没有意义的如果您确实需要,可以通过在 make_schema_at
中设置 naming
选项来更改它:
make_schema_at(
"Mydb::Schema",
{
debug => 0,
dump_directory => "../db/",
generate_pod => 0,
naming => { monikers => 'preserve' }
},
["dbi:mysql:mydb:localhost:3306", 'mydb', 'password'],
);
但我建议坚持使用默认设置。