0

私には 2 種類のユーザーがいます:employeescustomersと を区別する必要があるため、2 つの別々のテーブルを作成しました。次に、フレームワークとして CakePHP を選択し、ユーザー用の 1 つのテーブルである簡易認証のチュートリアルに従いたいと思いました。そこで、次のようなテーブルを作成することにしました。

CREATE TABLE IF NOT EXISTS `users` (       
  `id` int(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(36) COLLATE utf8_czech_ci NOT NULL, 
  `password` varchar(36) COLLATE utf8_czech_ci NOT NULL, 
  `role` varchar(30) COLLATE utf8_czech_ci NOT NULL,
  `name` varchar(30) COLLATE utf8_czech_ci NOT NULL,
  `surname` varchar(40) COLLATE utf8_czech_ci NOT NULL,
  `phone` varchar(16) COLLATE utf8_czech_ci NOT NULL,
  `email` varchar(40) COLLATE utf8_czech_ci NOT NULL,
  `employee_id` int(20) DEFAULT NULL,
  `customer_id` int(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `EMAIL` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `employee` (
  `id` int(20) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `customer` (
  `id` int(20) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT AUTO_INCREMENT=1 ;

私のモデル:

従業員

public $hasOne = array(
        'User' => array(
            'className' => 'User',
            'foreignKey' => 'employee_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        )
    );

ユーザー:

    public $belongsTo = array(
            'Employee' => array(
                'className' => 'Employee',
                'foreignKey' => 'employee_id',
                'conditions' => '',
                'fields' => '',
                'order' => ''
            );

ユーザー機能を追加:

public function add() {
    if ($this->request->is('post')) {      
      $this->User->create();    
      $roles = array('admin', 'employee');
      if (in_array($this->request->data['User']['role'], $roles)) {                                                 
        if ($this->User->Employee->save($this->request->data))
          $this->request->data['User']['employee_id'] = $this->User->Employee->getLastInsertId();
        else {
          $this->Session->setFlash(__('Employee could not be saved.'));
          return;
        }
      }
      else {
        $this->User->Customer->save($this->request->data);
        $this->request->data['User']['customer_id'] = $this->User->Customer->getLastInsertId();          
        $this->User->Customer->create();   

      }                   
      if (!$this->User->save($this->request->data)) {
        $this->Session->setFlash(__('The user could not be saved. Please, try again.'));
      }
      else {          
       $this->Session->setFlash(__('The user has been saved.'));
      } 

      //return $this->redirect(array('action' => 'index'));           
    }
    $employees = $this->User->Employee->find('list');
    $customers = $this->User->Customer->find('list');
    $this->set(compact('employees', 'customers'));
}

テーブルには主キーしか含まれていないためEmployee、この概念モデルは正しくないと感じています。Customer

( $this->User->Employee->save($this->request->data) も返しますfalse。CakePHP が空のモデルを保存できないという問題はありますか?

または、これらのテーブルをモデル化する方法について何か良いアイデアはありますか?

ありがとう。

4

1 に答える 1

0

従業員タイプのユーザーと顧客タイプのユーザーに固有の情報を取得する場合は、その方向性は問題ありません。これらの将来のフィールドを顧客テーブルと従業員テーブルに追加します。従業員タイプのユーザーと顧客タイプのユーザーを区別するだけでよい場合は、次のようなタイプを区別するためのユーザー テーブル内のフィールドが必要です。

is_employee tinyint(1) default 0,
于 2013-10-30T16:40:04.033 に答える