将数据保存到 2 个表中 cakephp 3

Posted

技术标签:

【中文标题】将数据保存到 2 个表中 cakephp 3【英文标题】:Save data into 2 tables cakephp 3 【发布时间】:2015-03-02 07:27:28 【问题描述】:

我对 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'));

非常感谢您的帮助。谢谢。

【问题讨论】:

商家和用户是什么关系?为了使 saveAll 工作,模型必须是相关的,因此您需要 Merchant hasMany User 或 Merchant hasAndBelongsToMany User 或其他方式。 CakePHP 3 中没有saveAll()book.cakephp.org/3.0/en/orm/saving-data.html 嗨@ndm,是的,我已阅读文档。我们有另一种方法将数据保存到 2 个不同的表中吗?我试过 put '$merchant = $this->Merchants->patchEntity($merchant, $this->request->data, [ 'related' => ['Users'] ]);" 但不成功。 嗨@SimonMason,我已经更新了我上面问题中的关系。是的,表得到了关系。 嗨@Debasis,我已经更新了我的问题中的代码。 【参考方案1】:

我认为您的问题是您的字段不是由关联名称的低下划线版本命名的。

代替put:

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:如果有任何语法错误,但英语不是我的母语,请见谅;)

【讨论】:

我在很多天都面临同样的问题非常感谢我还有一个问题要在多个表中保存记录如果你能帮助我我真的非常感谢你在保存之前我只想解雇两种模型的验证,但不知道是否会完成,例如。我有用户和员工表 员工表有字段 user_id 用户 has_one 员工和员工现在属于用户当我保存数据而不是在两个字段中保存具有受尊重的用户 id 但不触发验证只是保存数据,就像在用户表中是唯一的一样状态不为空等。请你指导我谢谢【参考方案2】:

请按照文档保存数据:

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

【讨论】:

以上是关于将数据保存到 2 个表中 cakephp 3的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP 3.x:将一个输入保存到多个表中

如何使用 laravel 将表单字段保存在 2 个表中

使用 cakephp 将复选框保存到单独的表中

CakePHP 在 HABTM 表中保存数据

NHibernate 将 1 个对象映射到 2 个表

Cakephp 保存数据并读取 MAX