我有两张桌子上有'艺术家'has_many'CD'。
我想获取'artist'和'CDs'并使用HashRefInflator来获取类似的东西(JSON格式) 我使用'HashRefInflator'。
[ {
"artist_name": "Dummy",
"artist_id": "1",
"cds": [{
"cd_id": "1,
"cd_desc": "Dummy",
}],
},
]
1。当我使用
$ schema->结果集( '艺术家') - >搜索({},
{
prefetch => 'CDS',
});
我从CD表中获得了“EXTRA”列的结果。我希望能够只选择“CD”中的特定列。
当我使用
时$ schema->结果集( '艺术家') - >搜索({}, {'+ select'=> ['我需要的栏'', '+ as'=> ['col names'], });
我得到'我需要的列'与主列而不是层次结构合并。
[ {
"artist_name": "Dummy",
"artist_id": "1",
"cds": []
**"cd_id": "1,
"cd_desc": "Dummy",**
},
]
如何在保持层次结构的同时从相关表中预取特定列。 ?
编辑:如果我不是很清楚,我很抱歉。 'join'和'+ columns'/'+ select'的问题在于它不保留分层数据结构。 'cds'应该是'Artist'对象中的一组对象。而不是它在Artist级别加入。 我不能使用“崩溃”,因为我有一个旧版本的DBIx :: Class。我会尝试安装更高版本并检查。答案 0 :(得分:1)
使用join而不是prefetch:
$schema->resultset('Artist')->search(
{},
{
join => ['cds'],
'+select' => ['cd.desc'],
result_class => 'DBIx::Class::ResultClass::HashRefInflator'
}
);
答案 1 :(得分:0)
您需要DBIx::Class
版本0.08250或更高版本支持collapse
result set attribute:
my $rs = $schema->resultset('Artist')->search({}, {
'+columns' => [ qw/ cds.col1 cds.col2 / ],
join => 'cds',
collapse => 1,
});