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

时间:2017-10-20 18:18:32

标签: perl dbix-class

我正在检查我的某个应用程序中的不匹配用户名。 如果找到不匹配的用户名,我会将值包装在<mark>标记中。

我希望在将其传递给我的JS之前更新我的DBIx :: Class对象的用户名值。

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

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});

我不更新DB值非常重要。我只想更新变量的值。我目前仍在查看DBIx :: Class文档。

任何方向都表示赞赏。

1 个答案:

答案 0 :(得分:2)

如果您不希望修改该对象,请不要修改该对象。

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

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

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