Cakephp 3.x保存多个表

时间:2016-11-02 06:34:23

标签: associations cakephp-3.0 savemany

在我的cakephp(3.3)项目中,如何在单个保存中保存多个表。我的关联如下,我也在这里给我的代码。

表1:用户

在类UsersTable中扩展表

$this->hasOne('ProfileDetails', [
'foreignKey' => 'user_id',
'joinType' => 'INNER'
]);

表2:profile_details

在类ProfileDetailsTable中扩展了表

$this->belongsTo('Users', [
'foreignKey' => 'user_id',
'joinType' => 'INNER'
]);

保存多个表的数据格式应该是什么? 在我的模板中,我添加了以下内容,现在我只使用了几个字段

$this->Form->input('User.username',['type' => 'text','class'=>'form-control']) ?>
$this->Form->input('User.password',['type' => 'password','class'=>'form-control']) ?>
$this->Form->input('User.email',['type' => 'text','class'=>'form-control']) ?>
$this->Form->input('ProfileDetail.first_name',['type' => 'text','class'=>'form-control']) ?>

在保存之前的控制器中我已经进行了调试,结果如下

debug($this->request->data);
$user = $this->Users->patchEntity($user, $this->request->data);
debug($user); 
exit;
$this->Users->save($user)

调试结果

\src\Controller\UsersController.php (line 39)
[
'User' => [
'username' => 'Tester',
'password' => '43434324',
'email' => 'test@gmail.com',
'role' => 'admin'
],
'ProfileDetail' => [
'first_name' => 'Tester'
]
]
\src\Controller\UsersController.php (line 41)
object(App\Model\Entity\User) {

'User' => [
'username' => 'Tester',
'password' => '43434324',
'email' => 'test@gmail.com',
'role' => 'admin'
],
'ProfileDetail' => [
'first_name' => 'Tester'
],
'[new]' => true,
'[accessible]' => [
'*' => true
],
'[dirty]' => [
'User' => true,
'ProfileDetail' => true
],
'[original]' => [],
'[virtual]' => [],
'[errors]' => [
'email' => [
'_required' => 'This field is required'
]
],
'[invalid]' => [],
'[repository]' => 'Users'

}

您能否建议我如何通过单一保存验证将这些数据保存在多个表中?

2 个答案:

答案 0 :(得分:0)

查看调试时,会出现错误消息,说明需要使用电子邮件字段。也许那是你的问题..

答案 1 :(得分:0)

如果仍然无法正常工作,请尝试以下操作:

replace User by users
and ProjectDetail by project_details 

在你的表格中。并且还从以下内容中删除joinType:

$this->hasOne('ProfileDetails', [
'foreignKey' => 'user_id',
'joinType' => 'INNER'
]);