在我的项目中,我有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
如果要生成您提供给我们的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)