Perl 如何在DBIx::Class中指定一列远程联接(删除了多个关系)?

Perl 如何在DBIx::Class中指定一列远程联接(删除了多个关系)?,perl,dbix-class,Perl,Dbix Class,如何在第三个表的列中指定要加入的内容?这是我的密码: my $join = $schema->resultset('Track')->search({'name' => 'Eminem'},{'join' => {'cd' => 'artist'}}); 它只显示Eminem的轨迹,但我还想显示艺术家的名字,Eminem?我无法在该查询中访问name,因为这是Track的结果集,name是Artister表中的一列,是联接中的第三个表。使用关系访问器 for my

如何在第三个表的列中指定要加入的内容?这是我的密码:

my $join = $schema->resultset('Track')->search({'name' => 'Eminem'},{'join' => {'cd' => 'artist'}});

它只显示Eminem的轨迹,但我还想显示艺术家的名字,Eminem?我无法在该查询中访问
name
,因为这是Track的结果集,
name
是Artister表中的一列,是联接中的第三个表。

使用关系访问器

for my $track (
    $schema->resultset('Track')->search(
        {
            name => 'Eminem',
        },
        {
            join => {cd => 'artist'},
        }
    )->all
) {
    use Data::Printer;
    p { $track->get_inflated_columns };
    p $track->cd->artist->name;
}
__END__
{
    cd        MyDatabase::Main::Result::Cd  {
        internals: {
            _column_data     {
                artist   2,
                cdid     3,
                title    "The Marshall Mathers LP"
            },
        }
    },
    title     "The Way I Am",
    trackid   1
}
"Eminem"
{
    cd        MyDatabase::Main::Result::Cd  {
        internals: {
            _column_data     {
                artist   2,
                cdid     3,
                title    "The Marshall Mathers LP"
            },
        }
    },
    title     "Stan",
    trackid   2
}
"Eminem"

我猜您希望根据艺术家名称而不是曲目名称筛选结果集:

my $rs = $schema->resultset('Track')->search({
    'artist.name' => 'Eminem',
},
{
    join => { cd => 'artist' },
});
在resultset中循环时,可以使用关系和列访问器访问它:

for my $track ($rs->all) {
    say $track->cd->artist->name . ' - ' . $track->name;
}

我只需要你回答的循环部分,我的问题是正确的。谢谢