0

私は Agiletoolkit を初めて使用し、まだコツを学んでいます。これが私の質問です:

ジョブを管理するための定期的な CRUD があります。

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

モデルには、「追加」ページで自動的に入力されるフィールド「job_number」が含まれています: N762、N763 など。

これは、モデルまたは CRUD テーブルから呼び出される addjob ページで実行できるものですか?

非常に単純なコード例を教えてもらえますか?

ありがとう

4

2 に答える 2

2

これはモデルレベルで行うべきだと思います。基本的にViewレベルとは関係ありません。

この job_number フィールドが ID と厳密に関連付けられている場合は、モデルの式フィールドとして作成し、データベースに保存することさえできません。たとえば、ジョブ番号 = ID + 100 です。

しかし、本当にデータベースに保存したい場合は、おそらく次のようにする必要があります。

1) モデルでは、type('number') の通常のフィールドとして job_number を作成しますが、このフィールドを表示する場所 (フォーム、グリッド) に応じて ->system(true) または ->editable(false) を使用します。

2) モデルの init メソッドでフック 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 チャンネルに参加して直接質問することも大歓迎です。

于 2013-01-24T09:01:56.020 に答える
0

このような何かがあなたの質問に対処するはずです:

モデルの初期化:

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

ただし、テストされていません。

于 2013-01-29T17:34:55.830 に答える