一度に複数のテーブルを更新するモジュール 龍司の場合
氷川 XOOPS Module 開発室 一度に複数のテーブルを更新するモジュール
にて、cubson が生成する ActionForm をそのまま利用する形での実装方法が紹介されています。
私はこれとは違う方法でやっていたので、私のやり方をちょっと紹介。
ActionForm は、入力値の受け渡しに使う物とわりきって、複数テーブルを更新するケースなら、複数テーブルの項目をひとつにした ActionForm をつくってしまいます。
このとき作成する ActionForm にテーブル分だけ、load と update メソッドを用意します。
Action 側は、_setupObject メソッドで、複数テーブルのデータ読み込みと Object 作成を行います。
getDefaultView と execute で複数テーブル分 load,update を行うようにします。
# データの関連の仕方によっては、$this->mObject に関連 Object を持たせるようにすることもあります。この場合、getDefaultView と execute メソッドには変更なし。
_doExecute で更新処理が行われるので、ここで複数テーブル分更新をかけます。
複数テーブルを同時に更新する必要があるケースは多いので、最近は AbstractEditAction を下記のように書き換えて、 ActionForm への load,update はサブクラスでオーバーライドできるようにしています。
function _actionFormLoadTarget()
{
$this->mActionForm->load($this->mObject);
}
function getDefaultView()
{
if ($this->mObject == null) {
return HOGE_FRAME_VIEW_ERROR;
}
$this->_actionFormLoadTarget();
return HOGE_FRAME_VIEW_INPUT;
}
こうしておいて実際の更新をする Action で下記のようにしています。
function _actionFormLoadTarget()
{
$this->mActionForm->load($this->mObject);
$this->mActionForm->loadFoo($this->mFoo);
}
このやり方だと、書き換えるファイル数が多くなってしまうので、
氷川 XOOPS Module 開発室 一度に複数のテーブルを更新するモジュール で紹介されている方法も一度試してみたいと思います。
RSS feed for comments on this post.
ƤˤϡޤȤդƤޤ
Ȥ
ʤߥȤդ뤳ȤϽޤ