0

「staff_code」の主キーを持つモデルがあります

以下のような顧客検証ルールがあります。

public $validate = array(
        'staff_code' => array(
            'unique' => array(
                'rule' => 'isUnique',
                'message' => 'This Staff Code already exists',
                'last' => true
            ),
            'sc_required' => array(
                'rule' => 'notEmpty',
                'message' => 'The Staff Code must be specified',
        ))

    );

フィールドが一意でない場合、検証エラーは表示されません

誰かがこのエラーを克服しましたか? ユーザーが入力した主キーに関連していると思います。

別のソフトウェアで使用されているため、スキーマをそのままにしておく必要があり、これが機能する方法を変更するのは本当に悪夢です。

必要かどうかはわかりませんが、私の見解は次のとおりです。

<?php

echo $this->Form->create('Staff');
echo $this->Form->inputs(array(
    'staff_code' => array('type' => 'text', 'autocomplete' => 'off'),
    'login_name' => array('type' => 'text', 'autocomplete' => 'off'),
    'person_name' => array('type' => 'text', 'autocomplete' => 'off'),
    'password',
    '_allowed_to_do_po',
    'is_active'
));
echo $this->Form->input('role', array('options' =>
    array('user' => 'user', 'admin' => 'admin'), 'empty' => false, 'default'=>'user'));
echo $this->Form->end(array(
    'label' => 'Save',
    'class' => 'btn'
));
?>

...そして Staff コントローラからの私のカスタム保存関数:

function emSave($data) {
    if (!$this->find('first', array('conditions' => array('staff_code' => $data['Staff']['staff_code'])))) {
        if ($this->save($data)) {
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }
}

注意: エラー メッセージは、主キーではない他のフィールドでは問題なく機能します。

4

1 に答える 1

0

問題は、保存を呼び出す前にコントローラーで検証ルックアップを行っていることだと思います。Save は自動的に検証を呼び出すので、最初に検証する必要はありません。それが Unique ルールの要点です。それが自動的に行われます。

'required' => trueフィールドを有効にしたい場合は、検証 に追加することもできます。

ただし、ユーザーにデータベースの主キー フィールドを入力させることは、私の意見では悪い習慣です。これは自動的に生成され、ユーザーには見えないようにする必要があります。

于 2013-02-05T09:53:34.917 に答える