7

テーブルに複合一意キーを持ち、それらを検証したいのは私が最初ではないと確信しています。自転車を発明したくないので、まずはここでお願いします。'id'列を主キーとして、他の2つの列を一意の複合キーとして持つテーブルがいくつかあります。送信されたエントリが一意であることを確認し、一意でない場合は検証エラーを表示する検証ルールがあると便利です。Cakephpでは、カスタム検証ルールで実行できます。誰かがすでにそのようなメソッドを作成していると確信しています。

理想的には、さまざまなモデルで使用できるapp_model.phpのメソッドになります。

4

3 に答える 3

10

私はその機能を使用しています:

function checkUnique($data, $fields) {
    if (!is_array($fields)) {
            $fields = array($fields);
        }
        foreach($fields as $key) {
            $tmp[$key] = $this->data[$this->name][$key];
        }
    if (isset($this->data[$this->name][$this->primaryKey]) && $this->data[$this->name][$this->primaryKey] > 0) {
            $tmp[$this->primaryKey." !="] = $this->data[$this->name][$this->primaryKey];
        }
    //return false;
        return $this->isUnique($tmp, false); 
    }

基本的に使用法は次のとおりです。

'field1' => array(
                'checkUnique' => array(
                    'rule' => array('checkUnique', array('field1', 'field2')),
                    'message' => 'This field need to be non-empty and the row need to be unique'
                ),
            ),
'field2' => array(
                'checkUnique' => array(
                    'rule' => array('checkUnique', array('field1', 'field2')),
                    'message' => 'This field need to be non-empty and the row need to be unique'
                ),
            ),

したがって、基本的に、これは各フィールドの下に、それが一意ではないという警告を表示します。

私はこれをたくさん使用しており、適切に機能しています。

于 2010-08-10T07:33:02.380 に答える
-1

あなたはそれをアプリモデルに入れることができますが、私の提案は、その$validateプロパティでルールを配置することによってモデルに直接追加することです.

組み込みのisUnique ルールを確認してください。

于 2010-08-10T01:58:17.690 に答える