dbix::class 带有附加参数的多对多 JSON

dbix::class many-to-many with additional parameters as a JSON

我在 DBIx::Class 中有一个类似于 DBIx:Class many-to-many relationship with additional attribute 的多对多关系。考虑 user_task table 上的相同示例,其中 params 列是文本类型。

我一直在 table 列中使用 JSON 字符串,并像在

中那样执行 inflate/deflate
__PACKAGE__->inflate_column(
    'params',
    {   inflate => sub {
            decode_json shift;
        },
        deflate => sub {
            encode_json shift;
        }
    }
);

结果

use Data::Dump qw/dd/; 
my $user_task = $schema->resultset("UserTask")->find({userid=>1,taskid=>1});

dd {$user_task->get_columns}; 

结果

{userid=>1,taskid=>1,role=>"admin",params=>"{}"}

但是如果

dd {$user_task->get_inflated_columns};

我没有得到预期的结果。似乎所有的柱子都在膨胀。从文档 https://metacpan.org/pod/DBIx::Class::Row#get_inflated_columns 来看,它似乎应该只膨胀那些具有 inflate_column for.

的列

这似乎也只适用于多对多桥 table,因为如果我在非多对多结果上调用 get_inflated_columns,就会出现预期的结果。

问题

这是错误(或功能)吗?如果它是一项功能,是否有它不起作用的原因?

或者,我可以通过仅在 params 列上有选择地调用 get_inflated_column 来构建结果。这似乎是不必要的,但也许是一个合理的解决方法。

如上所述,详细信息在 many_to_many 调用中,其中我将 userid 作为第三个参数,参见 the documentation for many_to_many。它应该是访问者的名字。