繁体   English   中英

使用列别名创建DBIx ResultSet

[英]Create DBIx ResultSet using column aliases

我已经开始使用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():Database :: Schema :: Result :: TestClass上没有这样的列名

但是,以下工作正常:

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

如果以后有TestClass对象,请尝试按以下方式访问其列:

 $object->NAME;

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

但这没关系:

 $object->name

我希望能够使用我提供的列的访问器来创建对象,并用于创建对象和访问列以保持一致,但这似乎并非如此。 谁能解释为什么?

我认为您的困境的答案在于DBIx :: Class Tutorial的第3部分 另外, DBIx::Class::ResultSource类的add_columns方法手册页指出: 使用此accessor属性) 设置此列的accessor方法的名称。 如果未设置,将使用该列的名称。

基本上你所做的是定义列NAME ,并为它创建访问name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM