如何根据主键ID将表单中的字段设置为自动递增?

时间:2013-01-24 02:50:24

标签: php crud atk4

我是Agiletoolkit的新手,仍在学习绳索。 这是我的问题:

我有一个常规的CRUD来管理工作。

$this->add('CRUD')->setModel('Job');

模型包含字段“job_number”,该字段应自动填入“添加”页面:N762,N763等。

这可以在模型中完成,还是从CRUD表中调用addjob页面?

任何人都可以给我一些非常简单的代码示例吗?

由于

2 个答案:

答案 0 :(得分:2)

我认为这应该在模型级别完成。它基本上与View级别无关。

如果此job_number字段与ID严格相关,那么您甚至可以将其作为模型中的表达式字段,甚至不将其存储在数据库中。例如,job_number = id + 100。

但是如果你真的想将它存储在数据库中,那么你应该这样做:

1)在模型中将job_number创建为具有类型(' number')的普通字段,但是使用 - > system(true)或 - > editable(false),具体取决于您希望在何处看到此内容字段(表单,网格);

2)在模型init方法中添加hook afterInsert。

function init(){
    parent::init();

    // ... your field definitions here

    // add afterInsert hook
    $this->addHook('afterInsert',array($this,'afterInsert'));
}

3)在模型创建方法

function afterInsert($m,$new_id){ // <-- new_id is ID of newly inserted record
    $m->load($new_id);
    $m['job_number'] = $new_id + 100; // <-- your function here
    $m->save();
}

or maybe you can even write it simpler - not sure

function afterInsert($m,$new_id){ // <-- new_id is ID of newly inserted record
    $this->set('job_number',$new_id + 100); // <-- your function here
    $this->save();
}

这应该有效,但我没有测试过。只需动态写在这里。

试试这个,如果您需要更多帮助,请告诉我们。此外,欢迎您加入ATK4 IRC频道并直接提出您的问题。

答案 1 :(得分:0)

这样的事情应该解决你的问题:

模型init中的

$this->addField("job_no")
    ->defaultValue("N" . $this->dsql()->del("fields")->field(
          $this->dsql()->expr("max(id) + 1"), "nr"
    )->getOne());

但未经过测试。