我已经开始使用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
我希望能够使用我提供列的访问器创建对象,并创建对象并访问列以保持一致,但似乎并非如此。任何人都可以解释为什么会这样吗?
答案 0 :(得分:0)
我认为你的困境的答案在于part 3 of the DBIx::Class Tutorial。此外,manual page for the add_columns
method of DBIx::Class::ResultSource
class声明:使用此(accessor
属性)为此列设置访问者方法的名称。如果未设置,将使用列的名称。
您所做的基本上是定义列NAME
并为其创建一个访问者name