DBIx :: Class按ID从另一个表中获取行

ext*_*mkv 3 perl dbix-class

在我的项目中,我有3个表:艺术家,专辑和曲目

结果艺术家:

...
__PACKAGE__->has_many(
     'albums' => 'MYLIB::DB::Schema::Result::MyDir::Album',
     { 'foreign.artist_id' => 'self.id', },
);
...
Run Code Online (Sandbox Code Playgroud)

结果专辑:

...
__PACKAGE__->belongs_to(
     'artist' => 'MYLIB::DB::Schema::Result::Artist',
     { 'foreign.id' => 'self.artist_id', },
  );

__PACKAGE__->has_many(
     'tracks' => 'MYLIB::DB::Schema::Result::MyDir::Track',
     { 'foreign.album_id' => 'self.id', },
 );
...
Run Code Online (Sandbox Code Playgroud)

结果跟踪:

__PACKAGE__->belongs_to(
    'album' => 'MYLIB::DB::Schema::Result::MyDir::Album',
    { 'foreign.id' => 'self.album_id', },
);
Run Code Online (Sandbox Code Playgroud)

现在我有了一个对象$artist,我想通过ID获取Track.

查询示例: SELECT * FROM Tracks WHERE track_id = $x

Dav*_*oss 6

如果要生成您提供给我们的SQL,那么您拥有艺术家对象的事实就无关紧要了.只需获取一个跟踪结果集并继续运行find().

my $track_rs = $schema->resultset('Track');
my $track = $track_rs->find($track_id);
Run Code Online (Sandbox Code Playgroud)

如果由于某种原因,您没有架构对象,那么您可以从您的艺术家对象中获取该对象.

my $schema = $artist->result_source->schema;
Run Code Online (Sandbox Code Playgroud)