2013-02-17 60 views
1

的CakePHP版本2.2.3保存(),它是由模型相關的2種形式使用saveAssociated

我要保存使用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的書中發現的例子。

這裏是我用2種形式視圖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的書的啓發。

數據已保存,但是對於第二種形式,它保存的所有數據都是我客戶端表中每列的「NULL」值。但是如果我調試(請求 - >數據),我得到了我輸入的2個表單中的所有數據。這很奇怪。

這是什麼,我不正確地做?

非常感謝您的幫助!

[編輯]:我更新了這篇文章並更正了代碼。

回答

0

使用Client.0.name寫法僅需要hasMany關係,所以您需要將其更改爲:Client.name

+0

非常感謝enrmarc,只是這樣!我必須誤讀這本書,但再次感謝我非常感謝! – 2013-02-17 12:09:17

+0

我很高興我的幫助。 – 2013-02-17 12:36:58

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")); ?> 
+0

謝謝thaJeztah爲您的啓示它現在正常工作! 謝謝你們的幫助:) – 2013-02-17 12:08:36

+0

很高興我能幫上忙。祝你的項目好運! – thaJeztah 2013-02-17 12:10:09

+0

謝謝你們! :) – 2013-02-17 13:20:25