* DBIC リレーション [#pe86a3db]
** リレーションのあるテーブル上のデータも削除する。 [#j1dd4c9d]
ID1の会社とその会社の社員を一緒に削除する
$rs = $schema->resultset('Company');
$rs->find(1)->delete->delete_related('employee')
** 1対N [#q4324960]
選手とその所属チームを表すplayerテーブルとteamテーブルを想定すると、以下のようなコードになる。
package MyappDB::Player;
use base 'DBIx::Class';
__PACKAGE__->load_components(qw/ PK::Auto Core/);
__PACKAGE__->table('player');
__PACKAGE__->add_columns(qw/
player_id
name
age
team_id
/);
__PACKAGE__->set_primary_key('plyaer_id');
__PACKAGE__->belongs_to(team => 'MyappDB::Team', 'team_id');
1;
belongs_to()でリレーションを張り、第一引数のキーであるteamがアクセサになる。つまり、以下のようなコードでteamテーブルにアクセスできる。
$rs = $rs->search();
while (my $p = $rs->next) {
print $p->name;
print $p->team->team_name;
}
teamテーブルにteam_idカラムがなくteam_noカラムだった場合、あるいはteamテーブルのプライマリーキー以外のカラムと外部結合している場合、以下のようにすることでJOINで使うカラムを明示できる。
__PACKAGE__->belongs_to(team => 'MyappDB::Team', { 'foreign.team_no' => 'self.team_id' });