我在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的文档。它应该是访问器的名称。