CakePHP 3.x - 一个表格数据保存在许多表格中

时间:2016-06-09 00:25:10

标签: cakephp cakephp-3.0

我正在开发一个Cake PHP 3项目,但我遇到了问题:

在我的数据库中有:users (id,...)people (id,user_id,...)clients (id,person_id,...),所有一对一的关系。

我已在UsersTable方法中设置PeopleTableClientsTableinitialize类中的所有关系。

Templates/Clients/new.ctp中,我在客户端的输入中使用带有<fieldname>person.<fieldname>person.user.<fieldname>的表单助手,<分别为strong> person 和用户数据。

ClientsController::new()中,当我尝试保存数据时,Cake会抛出一个错误,因为它首先尝试保存在clients表中,但是还没有people数据,所以person_id的约束失败。

如何通过ClientsController告诉Cake,先将数据保存在users上,然后保存在people上,然后再保存在client表上?

2 个答案:

答案 0 :(得分:0)

您需要在修补/保存时指定关联的模型,因为您有嵌套关联。

$this->Clients->patchEntity($client, $this->request->data, [
    'associated' => [
        'People.Users'
    ]
]);

http://book.cakephp.org/3.0/en/orm/saving-data.html#converting-request-data-into-entities

答案 1 :(得分:0)

我解决了从用户角度保存数据的问题。在ClientsController::new()

$users = TableRegistry::get('Users');
$client = $users->newEntity( $this->request->data(), [
    'associated' => [
        'People',
        'People.Clients'
    ]
]);

现在Templates/Clients/new.ctp我在用户的输入中使用了表单助手<fieldname>person.<fieldname>person.client.<fieldname>人和客户端数据。

非常感谢来自irc.freenode.org #cakephp

的人们