2013-12-23 109 views
1

我有一種形式可以保存具有許多零件和許多顏色的人,但不會保存零件和顏色;只保存該人(主要模型)。腳本的cakephp:使用一種形式保存到多個模型

在我的名單視圖,部分:

echo $this->Form->input('Person.person_name', array('required' => true, 'placeholder' => 'Name Your Person', 'label' => false)); 
echo $this->Form->input('Part.0.part_name', array('required' => true, 'placeholder' => 'Add Part', 'label' => false)); 
echo $this->Form->input('Color.0.color_name', array('required' => true, 'placeholder' => 'Enter a Color', 'label' => false)); 

在我名單控制器:

if ($this->request->is('post')) { 
      $created = $this->Person->saveAll($this->request->data, array('validate'=>'first')); 
      if (!empty($created)) { 
       $this->Session->setFlash(__('The person and his/her parts and colors have been saved.')); 
       return $this->redirect(array('action' => 'index'));     
      } else { 
       $this->Session->setFlash(__('The person could not be saved. Please, try again.')); 
      } 
     } 

在我角色模型

public $hasMany = array(
    'PersonParts' => array(
     'className' => 'Part', 
     'foreignKey' => 'part_person_id' 
    ), 
    'PersonColors' => array(
     'className' => 'Color', 
     'foreignKey' => 'color_person_id' 
    ) 
); 

嘗試用saveAssociated替換saveAll,但它是相同的。 我在這裏做錯了什麼?任何幫助是極大的讚賞。

+0

你有三種型號對不對?並且值應該存儲在不同的表中 –

+1

將模型別名保持爲單獨的PersonParts - PersonPart是一個好主意 - 否則應用程序的某些方面會令人困惑(例如需要包含名爲PersonParts的表單字段) – AD7six

回答

2

必須(在hasMany變量別名等)在表單中添加別名原名:

echo $this->Form->input('Person.person_name'); 
echo $this->Form->input('PersonParts.0.part_name'); 
echo $this->Form->input('PersonColors.0.color_name'); 
+0

謝謝。天哪。不知道我必須這樣做。這不是在cakephp文件呃? – Leah

1

更新您的形式

echo $this->Form->input('Part.part_name',...) 
echo $this->Form->input('Color.color_name',...) 

而在你的控制器,使用

**saveAssociated** 
+0

'SaveAll'在上下文中是'SaveAssociated'的別名。您提出的表單結構不適用於多關係。 – AD7six

0

我認爲你需要獨立保存的一切。

您對這種可能性有什麼看法?

如果是,則通過。

$this->Person->Part->save(); 
$this->Person->Color->save(); 
1

試試這個

echo $this->Form->input('Person.person_name', array('required' => true, 'placeholder' => 'Name Your Person', 'label' => false)); 
echo $this->Form->input('PersonParts.0.part_name', array('required' => true, 'placeholder' => 'Add Part', 'label' => false)); 
echo $this->Form->input('PersonColors.0.color_name', array('required' => true, 'placeholder' => 'Enter a Color', 'label' => false)); 
0

爲了節省您可以使用類似:

$this->Model->saveMany($data, array('deep'=>TRUE)); 

請注意,「深層」選項需要CakePHP 2.1。沒有它,關聯的評論記錄將不會被保存。

所有這一切都在http://book.cakephp.org/2.0/en/models/saving-your-data.html

被證明也是正確的它

echo $this->Form->input('Person.person_name', array('required' => true, 'placeholder' => 'Name Your Person', 'label' => false)); 
echo $this->Form->input('Part.part_name', array('required' => true, 'placeholder' => 'Add Part', 'label' => false)); 
echo $this->Form->input('Color.color_name', array('required' => true, 'placeholder' => 'Enter a Color', 'label' => false)); 
+0

SaveMany用於保存相同類型的許多行__。這是問題的錯誤方法。 – AD7six