我已经开始使用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():数据库上没有此类列名:: schema :: result :: testClass
但是以下工作正常:
$schema->resultset("TestClass")->create(NAME => "test", VALUE => "value");
如果以后我有TestClass对象并尝试访问其列:
$object->NAME;
我得到无法找到对象方法"通过软件包"数据库:: schema ::结果:: testClass"
但这还可以:
$object->name
我希望能够使用登录器我提供的列和创建对象并访问列是一致的,但事实并非如此。谁能解释为什么这是?
我认为您难题的答案在于 dbix ::类教程的第3部分。另外,DBIx::Class::ResultSource
类的add_columns
方法的手册页指出:使用此( accessor
属性)设置此列的访问者方法的名称。如果未设置,则将使用列的名称。
基本上您所做的是定义列NAME
并为其创建访问者name