Как настроить автоматическое увеличение поля в форме на основе идентификатора первичного ключа?

Я новичок в Agiletoolkit и все еще изучаю веревки. Вот мой вопрос:

У меня есть обычный CRUD для управления работой.

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

Модель содержит поле "job_number", которое должно автоматически заполняться на странице "Добавить": N762, N763 и т. Д.

Это можно сделать в модели или на странице addjob, вызываемой из таблицы CRUD?

Кто-нибудь может дать мне очень простой пример кода?

Спасибо

2 ответа

Я считаю, что это должно быть сделано на уровне модели. Это в основном не имеет ничего общего с уровнем просмотра.

Если это поле job_number строго связано с ID, то вы даже можете сделать его в качестве поля выражения в модели и даже не сохранять его в базе данных. Например, job_number = id + 100.

Но если вы действительно хотите сохранить его в базе данных, то вам, вероятно, следует сделать следующее:

1) в модели создайте job_number как обычное поле с типом ('number'), но с ->system(true) или ->editable(false) в зависимости от того, где вы хотите увидеть это поле (форма, сетка);

2) в метод инициализации модели добавьте ловушку 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();
}

Это должно работать, но я не проверял это. Просто пишу здесь на лету.

Попробуйте, и если вам нужна дополнительная помощь, просто дайте нам знать. Также вы можете присоединиться к IRC-каналу ATK4 и задать свои вопросы напрямую.

Нечто подобное должно ответить на ваш вопрос:

в модели init:

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

Не проверено, хотя.

Другие вопросы по тегам