2017-03-10 9 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_atnamingオプション設定することで、これを変更することができます。

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

をしかし、私はデフォルトにこだわっ推薦します。

+0

ありがとうございます。問題は絶対に解決しました。ちょうど1つの質問:私はそれが私のプロジェクトでDBIxコードの残りの部分に問題を起こさないことを望みますか? – rajeev

+0

私が追加したいと思う別のコメントは、それが名前のように変更されたときに、プログラマーの頭の中で物事を真っ直ぐに保つという問題を作り出すことです。また、.pmファイルの内容にテーブル名が変更されていないので、上記のオプションを使用して「普通」に見えるようにしました。 – rajeev

+0

人と人とは、特に英語が母国語ではない場合は奇妙です一般的に意味をなさない_Books_と_Book_を考えてみましょう。それはかなり妥当です。 – simbabque

関連する問題

 関連する問題