dbix::用附加参数将多对多类作为JSON



我在DBIx::Class中有一个类似于DBIx的多对多关系:带有附加属性的类多对多的关系。考虑user_task表上的相同示例,该表具有类型为text的params列。

我一直在表列中使用JSON字符串,并像在中一样进行膨胀/收缩

__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的列。

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

问题

这是一个bug(或功能(吗?如果这是一个功能,有没有原因不起作用?

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

如上所述,详细信息在many_to_many调用中,我将userid作为第三个参数,请参阅many_to_many的文档。它应该是访问器的名称。

最新更新