0

私は奇妙な問題を抱えています。私の従業員テーブルには、主キーとしてid ->int(11) があります。コード->varchar(36)、パスワード、その他のフィールドもあります。このコードとパスワードは、従業員がシステムにログインするために使用する 2 つのフィールドです。CakePHP フォーム ヘルパーを使用して、Code フィールドと Password フィールドを含むログイン ページを作成しました。そして物事は順調に進んでいました。

今日、$this->Model->save を使用して従業員テーブルの別のフィールドを更新しようとすると、更新ではなく新しい行が挿入されました。そのとき、コードを主キーとして設定する必要があることを知りました。だから私$primaryKey = 'code'は従業員モデルを入れました。

それを入れた瞬間、ログインページのコードフィールドが消え、パスワードフィールドだけが残りました。を削除する$primaryKey = 'code'と、Code フィールドが戻ってきました。

したがって、コードをモデルの主キーとして設定することと関係があります。これを回避する方法はありますか?

コードを使用して Employee 行を更新し、ログイン ページの Code フィールドを保持できるようにする必要があります。

4

1 に答える 1

0

code本質的にはユーザー名フィールドのようです。codeがデータベースの主キーとして定義されていない場合は、 primaryKeyModelプロパティをとして設定しないことをお勧めしますcode

id更新する従業員レコードをCakeに指示するには、主キーフィールドを使用することをお勧めします。ただし、を使用する必要がある場合はcode、次のことを試してください。

codeフィールドにデータベース内の一意の制約があるか、Cake検証を使用して一意に検証されていると仮定すると、code更新するレコードを見つけるために使用できます。そのレコードを取得すると($current以下の場合)、主キーを取得できます。これは、更新するレコードを知っているidために必要です。Model::save

public function edit($code = null) {
    $current = $this->Employee->find('first', array(
        'conditions' => array(
            'Employee.code' => $code
        )
    ));
    $this->Employee->id = $current['Employee']['id'];

    if (!$this->Employee->exists()) {
        throw new NotFoundException(__('Invalid employee'));
    }
    if ($this->request->is('post') || $this->request->is('put')) {
        if ($this->Employee->save($this->request->data)) {
            $this->Session->setFlash(__('The employee has been saved'));
            $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash(__('The employee could not be saved. Please, try again.'));
        }
    } else {
        $this->request->data = $current;
    }
}
于 2012-07-28T15:41:36.520 に答える