2017-05-16 217 views
0

我有一个用户和一个客户端表。在CakePHP中从一个模型创建多个模型

它们链接如下:

-- ----------------------------------------------------- 
-- Table `users` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `users` (
    `id` INT(11) NOT NULL AUTO_INCREMENT, 
    `email` VARCHAR(45) NOT NULL, 
    `password` VARCHAR(255) NOT NULL, 
    `usertype` CHAR(2) NOT NULL, 
    `created` DATETIME NOT NULL, 
    `modified` DATETIME NULL DEFAULT NULL, 
    `firstname` VARCHAR(45) NOT NULL, 
    `lastname` VARCHAR(45) NOT NULL, 
    `phonenumber` VARCHAR(45) NOT NULL, 
    `suburb` VARCHAR(45) NOT NULL, 
    `state` VARCHAR(10) NOT NULL, 
    `businessname` VARCHAR(45) NULL DEFAULT NULL, 
    `image` BLOB NULL DEFAULT NULL, 
    `valid` INT NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE INDEX `email_UNIQUE` (`email` ASC)) 
ENGINE = InnoDB 
DEFAULT CHARACTER SET = utf8; 
-- ----------------------------------------------------- 
-- Table `clients` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `clients` (
    `id` INT NOT NULL AUTO_INCREMENT, 
    `user_id` INT NOT NULL, 
    PRIMARY KEY (`id`), 
    INDEX `CLIENTS_FK_idx` (`user_id` ASC), 
    CONSTRAINT `CLIENTS_FK` 
    FOREIGN KEY (`user_id`) 
    REFERENCES `users` (`id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 

我纷纷出炉这两个表,我创建了一个用户注册页面。在提交表单时,我希望数据库创建一个用户和一个客户端对象。

这里是我的UsersController方法形式的CakePHP:

public function clientregistration() 
    { 
     //Register a new client. Client enters all details and the system sets usertype=CL 
     $user = $this->Users->newEntity(); 
     if ($this->request->is('post')) { 
      $user = $this->Users->patchEntity($user, $this->request->getData()); 
      $user->usertype = 'CL'; 
      $user->valid = 1; 

      if ($this->Users->save($user) && $this->Coaches->($coach)) { 
       $this->Flash->success(__('You have successfully registered.')); 

       return $this->redirect(['action' => 'login']); 
      } 
      $this->Flash->error(__('Registration failure. Please, try again.')); 
     } 
     $this->set(compact('user')); 
     $this->set('_serialize', ['user']); 

我想要的代码自动预填所有的数据在客户表也是如此。

我该怎么做?

回答

2

我不知道你想预先填写什么,你只有user_id字段来保存。因此,如果您的关联在UsersTable.php中正确设置,您可以在保存后保存客户端实体用户:

$client = $this->Users->Clients->newEntity(); 
$client->user_id = $user->id; 
$this->Users->Clients->save($client); 
+0

谢谢Szymon! ! –

+0

单独保存相关数据并不是必须的,[** ORM可以自动执行**](https://book.cakephp.org/3.0/en/orm/saving-data.html#saving-关联),只需准备相关数据的用户实体(输入)即可。如果你真的要分开存储(无论出于何种原因),那么一定要在交易中做到这一点! @BigGreenAlligator – ndm