私が達成したいのは次のとおりです。
モデル(または関連モデル)の他の値を使用して自動的に計算される値をデータベースに保存する必要があります。これらのモデルフックの1つ(beforeInsert、beforeModify、afterInsert、afterModify)を使用してこれを行う必要があると思いますが、これをどの程度正確に行う必要がありますか?また、このフィールドは変更できませんが、UIフォーム/グリッドに表示されます。
例えば、
class Model_Address extends Model_Table{
public $table='address';
function init(){
parent::init();
$this->hasOne('Territory');
$this->addField('street');
$this->addField('house');
$this->addField('number');
$this->addField('name')->readonly(true); // this should be calculated on save
$this->addHook('beforeModify',$this);
}
// How to write this to set name=street+house+number+territory.name ???
function beforeModify($m){
$ter_name = $m->ref('Territory')->get('name');
$m['name'] = $m['street'].' '.$m['house'].' '.$m['number'].', '.$ter_name;
return $m;
}
}
編集:
この解決策は正しいでしょうか?動作しているように見えますが、まだわかりません。
class Model_Address extends Model_Table{
public $table='address';
function init(){
parent::init();
$this->hasOne('Territory');
$this->addField('street');
$this->addField('house');
$this->addField('number');
$this->addField('name')->readonly(true); // this should be calculated on save
$this->addHook('beforeSave',$this);
}
function beforeSave($m){
$t=$m->ref('territory_id');
if($t->loaded()){
$m=set('name',$m->get('street').' '.$m->get('house').' '.$m->get('number').', '.$t->get('name'));
}
return $this;
}
}