You must add original name of alias in form (alias like in hasMany
variable):
echo $this->Form->input('Person.person_name');
echo $this->Form->input('PersonParts.0.part_name');
echo $this->Form->input('PersonColors.0.color_name');
Question
I have one form that saves a person with many parts and many colors but it's not saving the parts and the colors; only saving the person(main model).
On my list view, part of script:
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) );
On my list controller:
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.'));
}
}
On my Person Model:
public $hasMany = array(
'PersonParts' => array(
'className' => 'Part',
'foreignKey' => 'part_person_id'
),
'PersonColors' => array(
'className' => 'Color',
'foreignKey' => 'color_person_id'
)
);
Tried replacing saveAll with saveAssociated but it's the same. What am I doing wrong here? Any help is greatly appreciated.
La solution
You must add original name of alias in form (alias like in hasMany
variable):
echo $this->Form->input('Person.person_name');
echo $this->Form->input('PersonParts.0.part_name');
echo $this->Form->input('PersonColors.0.color_name');
Autres conseils
Try this
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) );
Update your form to
echo $this->Form->input('Part.part_name',...)
echo $this->Form->input('Color.color_name',...)
And in your controller, use
**saveAssociated**
To save you could use something like:
$this->Model->saveMany($data, array('deep'=>TRUE));
Note that the "deep" option requires CakePHP 2.1. Without it the associated Comment records would not be saved.
All this is documented in http://book.cakephp.org/2.0/en/models/saving-your-data.html
Also correct it
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) );
I think you need to save everything independently.
What do you think of this possibility?
if yes then go through.
$this->Person->Part->save();
$this->Person->Color->save();