2017-03-10 5 views
2

:DBIx :: Class :: Schema :: Loader가 테이블 이름을 복수형에서 단수형으로 변경하는 이유는 무엇입니까? 나는이 같은 스키마를 만들 <a href="https://metacpan.org/pod/DBIx::Class::Schema::Loader" rel="nofollow noreferrer">DBIx::Class::Schema::Loader</a>을 사용하고

#!/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'], 
); 

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, 
    }, 
... 
... 

"사람"이 "사람"으로 변환되는 이유는 무엇입니까?

+2

당신이나 다른 누군가가 쓴 스크립트입니다. DBIx :: Class의 일부가 아닙니다. 당신은 아마 거기에 매핑을 정의했습니다. – simbabque

+1

@simbabque 모든 스크립트는'DBIx :: Class :: Schema :: Loader :: make_schema_at'를 호출합니다. DBIx :: Class는 이것을하고 있습니다. OP가 만든 매핑이 아닙니다. – ThisSuitIsBlackNot

+0

@ThisSuitIsBlack 그 주석을 쓸 때 코드는 아직 질문에 없습니다. 나는 복수형에 대해서 알고 있지만 단수로는 가질 수없는 단어를 위해 그것을 기대하고 싶습니다. – simbabque

답변

4

기본적으로 DBIx :: Class :: Schema :: Loader는 Result 클래스의 이름을 단일화합니다. 사람들의 데이터베이스 테이블을 갖는 것은 당연한 일이지만, "People"이라는 한 사람을 대표하는 객체를 갖는 것은 이치에 맞지 않습니다.

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

을하지만 기본값 고수에게 추천 할 것입니다 :

당신이 정말로 원하는 경우

, 당신은 make_schema_atnaming 옵션을 설정하여 변경할 수 있습니다.

+0

고맙습니다. 문제를 해결했습니다. 한 가지 질문 : 프로젝트에서 DBIx 코드의 나머지 부분에 문제가 발생하지 않기를 바랍니다. – rajeev

+0

내가 추가하고 싶은 또 다른 코멘트는 : 이름이 바뀌면 프로그래머의 머리에서 일들을 똑바로 유지하는데 문제가 생깁니다. 또한 .pm 파일의 내용에서 테이블 이름을 변경하지 않으므로 위의 옵션을 사용하여 '정상'모양으로 만들었습니다. – rajeev

+0

사람과 사람이 이상하게 보입니다. 특히 영어가 모국어가 아닌 경우에는 그렇습니다. 일반적으로 이해가된다. _Books_ 및 _Book_을 생각하면 상당히 합리적입니다. – simbabque

관련 문제