我有一个数据模型,我在其中注册用户 - >客户 - > contactinfo->电子邮件/电话
这些表中的每一个都是不同的表,各自的控制器和所有相关的表。
当我尝试保存用户时,我使用以下代码:
$users = TableRegistry::get('Users');
$user = $users->newEntity($data, [
'associated' => ['Customers'],['Contactinfos'],['Phones'],['Emails']
]);
$users->save($user);
但它只能拯救用户和客户。
这是请求数据:
Array
(
[customers] => Array
(
[Customer] => Array
(
[name] => stackovertest
[last_name] => stackovertest
[ssn] => stackovertest
[address] => stackovertest
[gender] => male
[birth] => Array
(
[year] => 2015
[month] => 05
[day] => 20
)
)
)
[emails] => Array
(
[Email] => Array
(
[email] => stackovertest@test.com
)
)
[password] => stackovertest
[phones] => Array
(
[Phone] => Array
(
[number] => stackovertest
)
)
[role_id] => 0
[activation_code] => a026698222d0479252c2712d3d696fbcca8a766d
[tokentime] => 1432141608
[status] =>
[email] => stackovertest@test.com
[contactinfos] => Array
(
[contactinfo] => Array
(
)
)
)
基本上,contactinfo表将具有id(在数据库中自动增加)和客户的id。并且每个注册的电子邮件和电话都将具有contactinfo的ID。
这是$ user数组数据:
App\Model\Entity\User Object
(
[new] => 1
[accessible] => Array
(
[email] => 1
[password] => 1
[status] => 1
[activation_code] => 1
[tokentime] => 1
[role_id] => 1
[role] => 1
[customers] => 1
)
[properties] => Array
(
[customers] => Array
(
[0] => App\Model\Entity\Customer Object
(
[new] => 1
[accessible] => Array
(
[name] => 1
[last_name] => 1
[ssn] => 1
[gender] => 1
[birth] => 1
[address] => 1
[user_id] => 1
[user] => 1
[aoffers] => 1
[hoffers] => 1
[poffers] => 1
)
[properties] => Array
(
[name] => stackovertest
[last_name] => stackovertest
[ssn] => stackovertest
[address] => stackovertest
[gender] => male
[birth] => Cake\I18n\Time Object
(
[time] => 2015-05-20T00:00:00+0000
[timezone] => UTC
[fixedNowTime] =>
)
)
[dirty] => Array
(
[name] => 1
[last_name] => 1
[ssn] => 1
[address] => 1
[gender] => 1
[birth] => 1
)
[original] => Array
(
)
[virtual] => Array
(
)
[errors] => Array
(
)
[repository] => Customers
)
)
[password] => stackovertest
[role_id] => 0
[activation_code] => a026698222d0479252c2712d3d696fbcca8a766d
[tokentime] => 1432141608
[status] =>
[email] => stackovertest@test.com
)
[dirty] => Array
(
[customers] => 1
[password] => 1
[role_id] => 1
[activation_code] => 1
[tokentime] => 1
[status] => 1
[email] => 1
)
[original] => Array
(
)
[virtual] => Array
(
)
[errors] => Array
(
)
[repository] => Users
)
您可以看到它不包含contactinfo对象,因此不会保存它。
我该如何解决这个问题?或者有不同的方法来保存多级关联数据?
答案 0 :(得分:2)
嘿,我设法解决了这个问题。
首先,保存功能应该是这样的:
$user = $users->newEntity($data, [
'associated' => ['Customers','Customers.Contactinfos','Customers.Contactinfos.Phones','Customers.Contactinfos.Emails']
]);
$users->save($user);
其次,请求应该尊重所有级别:
Array
(
[customers] => Array
(
[Customer] => Array
(
[name] => test2
[last_name] => test2
[contactinfos] => Array
(
[Contactinfo] => Array
(
[emails] => Array
(
[Email] => Array
(
[address] => test2@test.test
)
)
[phones] => Array
(
[Phone] => Array
(
[number] => test2
)
)
)
)
[ssn] => test2
[address] => test2
[gender] => male
[birth] => Array
(
[year] => 2015
[month] => 05
[day] => 20
)
)
)
[password] => test2
[role_id] => 0
[activation_code] => 91c40a9979fcc564a5f27ff09317d6e2f4fdcd58
[tokentime] => 1432154711
[status] =>
[email] => test2@test.test
)
我的ctp看起来像这样:
<fieldset>
<legend><?= __('Add User') ?></legend>
<?php
echo $this->Form->input('customers.Customer.name');
echo $this->Form->input('customers.Customer.last_name');
echo $this->Form->input('customers.Customer.contactinfos.Contactinfo.emails.Email.address', array('label' => 'Email'));
echo $this->Form->input('password');
echo $this->Form->input('customers.Customer.contactinfos.Contactinfo.phones.Phone.number', array('label' => 'Phone'));
echo $this->Form->input('customers.Customer.ssn', array('label' => 'Cedula'));
echo $this->Form->input('customers.Customer.address');
echo $this->Form->input('customers.Customer.gender', array(
'options' => array('male' => 'Male','female' => 'Female')
));
echo $this->Form->input('customers.Customer.birth');
echo $this->Form->input('role_id', ['options' => $roles]);
?>
</fieldset>