DBICでcreate_relatedをoverrideする
Posted on 11月 26, 2009
Filed Under perl |
DBICを使っています。
User has_many Histories
っていう関係のテーブルUserとHistoryがあった時に、
Userの行それぞれに対して、最新のHistoryをUserの行の中にキャッシュしておくと便利なときがあります。
そんな時に、$user->add_to_histories ってやった時に $userもupdateしたい、という話です。
PERL:
-
CREATE TABLE user (id unsigned not null auto_increment, **中略**, history unsigned not null);
-
CREATE TABLE history (id unsigned not null auto_increment, user unsigned not null, **中略**, created_date datetime not null);
UserのRowクラスは
PERL:
-
中略
-
__PACKAGE__->has_many( histories => 'Schema::Row::History', 'user' );
HistoryのRowクラスは
PERL:
-
中略
-
__PACKAGE__->belongs_to( user => 'Schema::Row::User' );
UserのRowクラスに追加されるadd_to_$relを使って
PERL:
-
$user->add_to_histories({ action => 'marriage' });
とかってやるわけです。
HistoryのRowを追加する時にcreated_dateを意識せずに設定したいときとかに、
HistoryのRowクラスに↓って書いておきます
PERL:
これはよくやるんですが、同じタイミングでUserの方もupdateしたいって時に、
UserのRowクラスに、
PERL:
って書いておくと、便利だわー
typester++
Comments
Leave a Reply