使用saveAssociated()保存由模型关联的2个表单

时间:2013-02-17 09:40:44

标签: cakephp

CakePHP版本2.2.3

我想使用2个关联模型在同一页面上保存2个表单。 模型1:提案hasOne客户端 模型2:客户所属于提案

现在这是我的ProposalsController.php中的admin_edit操作:

function admin_edit($id=null){
        $this->loadModel('Client');
        if ($this->request->is('put') || $this->request->is('Post')) {
            if (!empty($this->request->data)) {
        // Use the following to avoid validation errors:
                unset($this->Proposal->Client->validate['proposal_id']);
                //$this->Proposal->saveAssociated($this->request->data);
                //$this->redirect(array('action' => 'index'));
                debug($this->request->data);
            }
        }
        elseif($id){
            $this->Proposal->id = $id;
            $this->request->data = $this->Proposal->read();
        }

    }

我使用了CakePHP书中的例子。

这是我的观点admin_edit.ctp,其中包含两种形式:

<hr/>
<h1>Proposition</h1>
<hr/>

<?php echo $this->Form->create('Proposal'); ?>

<?php echo $this->Form->input('Proposal.name', array('label' => "Nom de la proposition")); ?>
<?php echo $this->Form->input('Proposal.created', array('label' => "Date de création")); ?>
<?php echo $this->Form->input('Proposal.due', array('label' => "Date d'échéance")); ?>
<?php echo $this->Form->input('Proposal.content', array('label' => "Termes & conditions")); ?>
<?php echo $this->Form->input('Proposal.id'); ?>

<hr/>
<h1>Client</h1>
<hr/>

<?php echo $this->Form->input('Client.name', array('label' => "Nom du client")); ?>
<?php echo $this->Form->input('Client.project', array('label' => "Nom du projet")); ?>
<?php echo $this->Form->input('Client.address', array('label' => "Adresse")); ?>
<?php echo $this->Form->input('Client.phone', array('label' => "Téléphone")); ?>
<?php echo $this->Form->input('Client.email', array('label' => "Email")); ?>
<?php echo $this->Form->hidden('Client.proposal_id'); ?>
<?php echo $this->Form->input('Client.id'); ?>

<?php echo $this->Form->end('valider'); ?>

还受到CakePHP书籍的启发。

保存数据但是对于第二种形式,它保存的所有内容都是我的clients表的每列中的“NULL”值。但是,如果我调试(请求 - >数据),我得到的所有数据我都输入了2个表格。那很奇怪。

我做错了什么?

非常感谢你的帮助!

[编辑] :我已更新此帖并更正了代码。

2 个答案:

答案 0 :(得分:0)

我目前不在我的电脑上,所以无法检查,但是:

因为你有'hasOne'关系,而不是'hasMany',你不应该使用.0。为第二个表单命名。请查看手册中的第一个示例/说明:

http://book.cakephp.org/2.0/en/models/saving-your-data.html#model-saveassociated-array-data-null-array-options-array

因此第二种形式的输入将如下所示:

<?php echo $this->Form->input('Client.name', array('label' => "Nom du client")); ?>

答案 1 :(得分:0)

只有Client.0.name关系才需要使用hasMany表示法,因此您需要将其更改为:Client.name

相关问题