DBIx::Classを使用しており、ARの機能を使って、あるテーブルから複数テーブルをまたいでjoinする方法です。
テーブル構成
下記のようなテーブル構成だったとします。
- apps: アプリ情報
- users: アプリを保持するユーザ情報
- agencies: ユーザを管理する代理店情報
データ間の紐付き
こんな感じで紐づいています。
- apps.user_id -> users.id
- users.agency_id -> agencies.id
ARの設定
各モデルには上記のデータの紐付きを下記のように設定しています。
apps
__PACKAGE__->belongs_to( user => 'Users', { 'foreign.id' => 'self.user_id' } ); |
users
__PACKAGE__->belongs_to( agency => 'Agencies', { 'foreign.id' => 'self.agency_id' } ); |
やりたいこと
agencies.idでappsの一覧を取得したい。
具体的なコードはこんな感じになりました。
my $rs = $apps_model->search( # conditions { 'me.agency_id' => [検索条件の入力値] }, # attributes { join => { user => [qw/agency/] } } ); |