2014-06-09 68 views
3

在我的項目從另一個表中的行我有3個表:藝術家,專輯和曲目DBIx ::類獲得通過ID

結果藝術家:

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

結果專輯:

... 
__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', }, 
); 
... 

結果軌跡:

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

現在我有一個對象$artist,我想獲得一個由ID跟蹤。

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

回答

5

如果你想生成你給我們的SQL,那麼你有一個藝術家對象的事實是不相關的。只需獲得一個軌道結果集並運行find()就可以了。

my $track_rs = $schema->resultset('Track'); 
my $track = $track_rs->find($track_id); 

如果由於某種原因,你沒有一個架構對象,那麼你可以從你的藝術家的對象。

my $schema = $artist->result_source->schema; 
1

我認爲賽道是由您$artist專輯。查詢可以通過三個表上的聯接完成。見DBIx::Class::Manual::Joining

這是一個未經測試的例子。

my $tracks = $artist->search_related(
    { 
     id => $my_track_id, 
    }, 
    { 
     join => { albums => 'tracks' }, 
    } 
); 

如果你的軌跡不一定由$藝術家,那麼它propably更有意義,直接查詢tracks