我是Cakephp 3的新手。我尝试在Cakephp 3中执行saveAll功能,但不成功。
我有2个表:商家和用户
这两个表之间的关系如下:
用户有很多商家, 商家属于用户
我希望创建一个商家注册表单,将表格插入两个表格。
有人可以帮我解决如何使用Cakephp 3从1个表单中将数据插入2个不同的表吗?
我的代码如下:
<?= $this->Form->create($merchant); ?>
<fieldset>
<legend><?= __('Add Merchant') ?></legend>
<?php
echo $this->Form->input('User.id');
echo $this->Form->input('User.username');
echo $this->Form->input('User.password');
echo $this->Form->input('merchant_type_id', ['options' => $merchantTypes]);
echo $this->Form->input('name');
echo $this->Form->input('identity_number');
echo $this->Form->input('phone_number');
?>
</fieldset>
<?= $this->Form->button(__('Submit')) ?>
<?= $this->Form->end() ?>
控制器:
public function registration()
{
$merchant = $this->Merchants->newEntity();
if ($this->request->is('post')) {
$merchant = $this->Merchants->patchEntity($merchant, $this->request->data, [
'associated' => ['Users']
]);
if ($this->Merchants->saveAll($merchant)) {
$this->Flash->success('The merchant has been saved.');
return $this->redirect(['action' => 'index']);
} else {
$this->Flash->error('The merchant could not be saved. Please, try again.');
}
}
$users = $this->Merchants->Users->find('list', ['limit' => 200]);
$merchantTypes = $this->Merchants->MerchantTypes->find('list', ['limit' => 200]);
$this->set(compact('merchant', 'users', 'merchantTypes'));
}
非常感谢您的帮助。感谢。
答案 0 :(得分:2)
我认为您的问题是您的字段未被关联名称的缩写较低版本命名。
而不是放:
echo $this->Form->input('User.username')
会导致:
<input type="text" name="User[username]" >
你应该试着把东西放在:
echo $this->Form->input('user.username');
会导致:
<input type="text" name="user[username]" >
我希望它会有用:)
PS:对不起,如果有任何语法错误,但英语不是我的母语;)
答案 1 :(得分:0)
请按照保存数据的文档进行操作:
http://book.cakephp.org/3.0/en/orm/saving-data.html
如果您来自2.x,请阅读ORM迁移指南,它应该回答您的大部分问题:
http://book.cakephp.org/3.0/en/appendices/orm-migration.html