使用列别名创建DBIx ResultSet

时间:2012-11-01 16:06:42

标签: perl dbix-class

我已经开始使用DBIx :: Class了,我在很大程度上非常喜欢它,但真正开始惹恼我的是列别名似乎没有完全发挥作用。

EG。假设我有这个表定义:

#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():Database :: Schema :: Result :: TestClass

上没有这样的列名

但是以下工作正常:

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

如果稍后我有TestClass对象并尝试访问其列:

 $object->NAME;

我得到无法通过包“Database :: Schema :: Result :: TestClass”找到对象方法“NAME”

但是没关系:

 $object->name

我希望能够使用我提供列的访问器创建对象,并创建对象并访问列以保持一致,但似乎并非如此。任何人都可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

我认为你的困境的答案在于part 3 of the DBIx::Class Tutorial。此外,manual page for the add_columns method of DBIx::Class::ResultSource class声明:使用此accessor属性)为此列设置访问者方法的名称。如果未设置,将使用列的名称。

您所做的基本上是定义列NAME并为其创建一个访问者name