簡體   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