論理モデルは物理的に 2 つのテーブルに配置されているようです。まず、どのテーブルが「プライマリ」であるかを決定します。どちらの方法でもかまいません。次のモデルを作成して、「ヘッダー」テーブルをプライマリにします。
class Model_Header extends Model_Table {
public $table='header';
function init(){
parent::init();
$this->addField('date')->type('date');
$this->addField('field1');
$this->addField('field2');
}
}
次に、それを 2 番目のテーブルと結合し、そこからフィールドを追加する必要があります。$model->join() を呼び出すと、「SQL_Relation」オブジェクトが返されます。これを使用して、フィールドを追加し、さらに結合を作成できます。新しいオブジェクトを作成するか、既存のオブジェクトを拡張できます。
class Model_Record extends Model_Table {
public $table='header';
function init(){
parent::init();
$this->addField('date')->type('date');
$this->addField('field1');
$this->addField('field2');
$detail = $this->join('detail.idheader');
$detail->addField('body');
$details->addField('body_field1','field1');
}
}
両方のテーブルが同じフィールドを定義し、モデルには一意のフィールドが必要であるため、detail.field1 に新しい名前を定義しました。また、結合に使用するフィールド (idheader) を明示的に指定しました。次に、他のモデルと同じように新しいモデルを使用します。
$form=$this->add('Form');
$form->setModel('Model_Record');
$form->onSubmit(function($form){
$form->update()->js()->successMessage('success!')->execute();
});