使用列别名创建DBIX RESTIRSEN



我已经开始使用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

最新更新