形状与头部和细节

时间:2012-05-26 13:52:54

标签: atk4

前段时间我曾要求类似的东西,但现在我正在接受这个,所以再问一遍。

也许这个问题听起来很简单但不适合我。

我有两张桌子:

header (id,date,field1,field2) // This has One entry on the table
detail (id,idheader,field1,field2) // This can have multiple entries on the table

所以标题(1)--->细节(N)

这可能是制作表单并在同一$ f-> update()这两个表上更新的最佳方法吗?

想象一下,这可能是很多事情:发票,预算等等

非常感谢

2 个答案:

答案 0 :(得分:1)

看起来您的逻辑模型实际上位于两个表中。首先,确定哪个表是“主要的”,它可以是任何一种方式。我将通过创建以下模型使“header”表成为主要的:

class Model_Header extends Model_Table {
    public $table='header';
    function init(){
        parent::init();

        $this->addField('date')->type('date');
        $this->addField('field1');
        $this->addField('field2');
    }
}

接下来,您需要将其与第二个表连接并从中添加字段。当你调用$ 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();
});

答案 1 :(得分:0)

传统的方法是使网格带有“标题”并添加列扩展器,其中显示带有“细节”的网格,而模型“详细信息”则带有setMasterField(“idheader”,$ _GET [“header_id”]);

e.g。

class page_test extends Page {
    function initMainPage(){
        $g = $this->add("Grid"); // or CRUD
        $g->setModel("header");
        $g->addColumn("expander", "details");
    }
    function page_details(){
        $this->api->stikcyGET("header_id");
        $g = $this->add("Grid"); // or CRUD
        $m = $this->add("Model_detail")->setMasterField("idheader", $_GET["header_id"]);
        $g->setModel($m);

    }
}

未经测试。