Perl 如何就地修改DBIx::Class::行?
使用DBIx::Class::ResultSet是否可以像下面尝试的那样对内存中的结果进行更改Perl 如何就地修改DBIx::Class::行?,perl,dbix-class,Perl,Dbix Class,使用DBIx::Class::ResultSet是否可以像下面尝试的那样对内存中的结果进行更改 my @results = $self->search(...); for my $result (@results) { my $row = {$result->get_columns}; $row->{fieldname} = 'something else'; } return @results; 您可以使用类似以下内容: my @rows = $self->
my @results = $self->search(...);
for my $result (@results) {
my $row = {$result->get_columns};
$row->{fieldname} = 'something else';
}
return @results;
您可以使用类似以下内容:
my @rows = $self->search(
{...},
{result_class => 'DBIx::Class::ResultClass::HashRefInflator'}
);
for my $row (@rows) {
$row->{fieldname} = 'something else';
}
return @rows;
DBIx::Class为您定义的每一列生成一个列访问器。 它既可以用作读取器,也可以用作读取器
my $value = $row->columnname;
作为一名作家
$row->columnname('new value');
请不要损坏DBIx::Class::Row对象的内部变量!请注意,这是一个一般性建议,不特定于DBIx::Class、Perl或允许您执行此操作的任何其他语言。@abraxxa在
search
中使用DBIx::Class::ResultClass::HashRefInflator
返回哈希引用,不是对象。使用它意味着您无法取回行对象,因此无法使用它更新数据库。@abraxxa此条件不在问题范围内。如果fieldname
不是列名,该怎么办?在定义列时,您可以指定一个与列名不同的访问器名称,但我不建议使用它,因为它会造成问题更难,因为例如在搜索中,您只能使用列名,而不能使用访问器名。如果fieldname
不是列名,也不是访问器名,那么应该使用get\u column方法。