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指出:使用此accessor属性)设置此列的访问器方法的名称。如果未设置,将使用列的名称。

基本上你所做的是定义一个列NAME并为它创建一个访问器name

于 2013-05-05T19:25:55.583 回答