我想要完成的是以下内容。
我需要在数据库中保存一些字段,该字段的值应使用其模型(或相关模型)中的其他值自动计算。我想我应该使用这些模型钩子之一来做到这一点——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;
}
}