[英]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.