2

私は DBIx::Class を使い始めました。ほとんどの部分で気に入っていますが、列のエイリアスが完全に機能していないように見えて、本当に困っています。

例えば。次のテーブル定義があるとします。

#TestClass.pm

use strict;
use warnings;

package Database::Schema::Result::TestClass;

use base qw/DBIx::Class::Core/;

__PACKAGE__->table("TEST_TABLE");
__PACKAGE__->add_column("ID")
__PACKAGE__->add_columns(NAME => {accessor => "name"},
                         VALUE => {accessor => "value"}
                         );

そして、次のように新しい行を作成しようとします。

 $schema->resultset("TestClass")->create(name => "test", value => "value");

DBIx::Class::ResultSet::create(): No such column name on Database::Schema::Result::TestClass

ただし、以下は正常に機能します。

 $schema->resultset("TestClass")->create(NAME => "test", VALUE => "value");

後で TestClass オブジェクトがあり、その列にアクセスしようとすると、次のようになります。

 $object->NAME;

パッケージ "Database::Schema::Result::TestClass" を介してオブジェクト メソッド "NAME" が見つかりません

しかし、これは大丈夫です:

 $object->name

列を提供したアクセサーを使用してオブジェクトを作成し、オブジェクトの作成と列へのアクセスを一貫させることができると期待していますが、そうではないようです。これがなぜなのか説明できる人はいますか?

4

1 に答える 1

0

あなたのジレンマに対する答えはDBIx::Class Tutorialのパート 3 にあると思います。また、クラスのメソッドのマニュアル ページにはadd_columnsDBIx::Class::ResultSource次のように記載されています。 this (accessorプロパティ)を使用して、この列のアクセサ メソッドの名前を設定します。設定されていない場合、列の名前が使用されます。

基本的にあなたがしたことは、列を定義し、NAMEそのアクセサーを作成することでしたname

于 2013-05-05T19:25:55.583 に答える