0

結合している 3 番目のテーブルの列をDBIx::Classで指定するにはどうすればよいですか? これが私のコードです:

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

エミネムのトラックを表示するだけですが、アーティスト名、エミネムも表示したいですか? nameこれは Track の ResultSet でnameあり、Artist テーブルの列であり、結合の 3 番目のテーブルであるため、そのクエリでアクセスできません。

4

2 に答える 2

0

リレーションシップ アクセサーを使用します。

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"
于 2013-07-05T12:06:47.623 に答える