如何在不更新实际数据库的情况下更改 DBIx::Class 对象值

How can I alter a DBIx::Class object value without updating the actual DB

我正在检查我的一个应用程序中是否存在不匹配的用户名。 如果它发现不匹配的用户名,我会将值包装在 <mark> 标签中。

我想在将 DBIx::Class 对象的用户名值传回我的 JS 之前更新它。

我目前有以下内容,这几乎是我想要的,但不完全是。

my $mismatch_username = check_for_mismatch_username($self, $id, 'AD');
    if(defined $mismatch_username)
    {
      my $flagged_username = "<mark>".$info->accountname."</mark> <font color=\"red\">(Mismatch: $mismatch_username)</font>";
       $info->update({accountname => $flagged_username});
    }
$info = {$info->get_columns};
$self->render(json => {info => $info});

重要的是我没有更新数据库值。我只想更新变量的值。我目前仍在浏览 DBIx::Class 文档。

不胜感激。

如果您不想修改对象,请不要修改它。

(当然,您可以使用 $info->accountname(…) 更新字段而不保存它。但这仍然会使对象处于修改状态,其他代码可能会保存它。它也可能如果 HTML 标记被字段上的验证器拒绝,则失败。)

如果您真正需要的只是更改 JSON 中的用户名,请先生成将进入 JSON 的数据,然后在呈现数据之前更新数据中的相应字段:

my $data = { $info->get_columns };
if (defined $mismatch_username) {
    $data->{accountname} = "<mark>…";
}
$self->render(json => { info => $data });