![](/img/trans.png)
[英]How to avoid race conditions when using the find_or_create method of DBIx::Class::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.