我正在开发一个Cake PHP 3项目,但我遇到了问题:
在我的数据库中有:users (id,...)
,people (id,user_id,...)
和clients (id,person_id,...)
,所有一对一的关系。
我已在UsersTable
方法中设置PeopleTable
,ClientsTable
和initialize
类中的所有关系。
在Templates/Clients/new.ctp
中,我在客户端的输入中使用带有<fieldname>
,person.<fieldname>
和person.user.<fieldname>
的表单助手,<分别为strong> person 和用户数据。
在ClientsController::new()
中,当我尝试保存数据时,Cake会抛出一个错误,因为它首先尝试保存在clients
表中,但是还没有people
数据,所以person_id
的约束失败。
如何通过ClientsController
告诉Cake,先将数据保存在users
上,然后保存在people
上,然后再保存在client
表上?
答案 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