我已经开始使用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这类列名在数据库上::Schema::ResultSet::TestClass
但是,以下功能很好:
$schema->resultset("TestClass")->create(NAME => "test", VALUE => "value");
如果以后我有TestClass对象,并尝试以这样的方式访问它的列:
$object->NAME;
我无法通过package获得对象方法"NAME“数据库::Schema::Result::TestClass”
但这没问题:
$object->name
我希望能够使用我提供的列的访问器来创建对象,并且对于创建对象和访问列是一致的,但情况似乎并非如此。有人能解释一下为什么吗?
发布于 2013-05-05 11:25:55
我认为你的困境的答案在于part 3 of the 。另外, class声明:使用它( accessor
属性)为此列设置访问器方法的名称。如果未设置,则将使用列的名称。
基本上,您所做的是定义一个列NAME
并为它创建一个访问器( name
)。
https://stackoverflow.com/questions/13180997
复制相似问题