需要你的帮助,解决我在cakephp 2.0中使用saveAll的问题。我有3个型号:数据表,数据表标题和数据表值。我需要保存所有内容,从数据表中输入最后一个ID。我只从Datasheetsheading中读到......
我的控制器:
public function add_datasheet($id = null) {
$this->set('datasheetsheadings', $this->datasheetsheading->find('all', array('limit' => 0 .','. 9)));
$this->set('datasheetsheadings2', $this->datasheetsheading->find('all', array('limit' => 9 .','. 9)));
$this->set('id', $id);
if ($this->request->is('post')) {
if ($this->datasheet->save($this->request->data)) {
$this->datasheetsvalue->saveAll($this->request->data['datasheetsvalue']);
$this->Session->setFlash('Your Datasheet >> Lot: ' . $this->request->data['datasheetsvalue'][1]['value'] . ' << has been saved.');
$this->redirect(array('action' => 'Datasheets/' . $this->request->data['datasheet']['id_tbl_articles']));
} else {
$this->Session->setFlash('Unable to add your datasheet.');
}
}
}
我的观点:
<?php echo $this->Form->create('datasheet', array('action' => 'add_datasheet')); ?>
<fieldset>
<legend><?php echo __('Neues Datenblatt'); ?></legend>
<?php
$value_id = 0;
echo $this->Form->input('datasheet.comment', array('label' => 'Kommentar')) . '<hr>';
echo '<div style="width:300px;float:left;">';
foreach ($datasheetsheadings as $datasheetsheading) :
$value_id = $value_id +1;
echo $this->Form->input('datasheet.id_tbl_articles', array('type' => 'hidden', 'value' => $id));
echo $this->Form->input('datasheetsvalue.' . $value_id . '.id_tbl_articles', array('type' => 'hidden', 'value' => $id));
echo $this->Form->input('datasheetsvalue.' . $value_id . '.id_tbl_datasheets', array('type' => 'hidden'));
echo $this->Form->input('datasheetsvalue.' . $value_id . '.id_tbl_datasheetsheadings', array('type' => 'hidden', 'value' => $datasheetsheading['datasheetsheading']['id']));
echo __('<div style="width:140px;color:#FFF;float:left;">' . $datasheetsheading['datasheetsheading']['heading'] . '</div><div style="width:160px;color:#FFF;float:left;text-align:right;">');
echo $this->Form->input('datasheetsvalue.' . $value_id . '.print', array('type' => 'checkbox', 'label' => 'Im Datenblatt anzeigen', 'style' => 'color:#FFF;'));
echo '</div><div style="clear:left;"></div><div style="margin-top:-30px;">';
echo $this->Form->input('datasheetsvalue.' . $value_id . '.value', array('label' => ''));
echo '</div>';
endforeach;
echo '</div>';
echo '<div style="width:170px;float:left;"></div>';
echo '<div style="width:300px;float:left;">';
foreach ($datasheetsheadings2 as $datasheetsheading2) :
$value_id = $value_id +1;
echo $this->Form->input('datasheet.id_tbl_articles', array('type' => 'hidden', 'value' => $id));
echo $this->Form->input('datasheetsvalue.' . $value_id . '.id_tbl_articles', array('type' => 'hidden', 'value' => $id));
echo $this->Form->input('datasheetsvalue.' . $value_id . '.id_tbl_datasheets', array('type' => 'hidden'));
echo $this->Form->input('datasheetsvalue.' . $value_id . '.id_tbl_datasheetsheadings', array('type' => 'hidden', 'value' => $datasheetsheading2['datasheetsheading']['id']));
echo __('<div style="width:140px;color:#FFF;float:left;">' . $datasheetsheading2['datasheetsheading']['heading'] . '</div><div style="width:160px;color:#FFF;float:left;text-align:right;">');
echo $this->Form->input('datasheetsvalue.' . $value_id . '.print', array('type' => 'checkbox', 'label' => 'Im Datenblatt anzeigen', 'style' => 'color:#FFF;'));
echo '</div><div style="clear:left;"></div><div style="margin-top:-30px;">';
echo $this->Form->input('datasheetsvalue.' . $value_id . '.value', array('label' => ''));
echo '</div>';
endforeach;
echo '</div>';
echo '<div style="clear:left;"></div>';
echo $this->Form->end(__('Sichern'));
?>
</fieldset>
通过保存数据表,它存储在数据表表格中:id(auto_increment)
,id_tbl_articles
,comment
,created
,modified
。这很完美!
在datasheetsvalue表中,我得到了值:id(auto_increment)
,id_tbl_datasheetsheadings
,id_tbl_articles
,values
和print
。只有id_tbl_datasheets
才能获得NULL
。我尝试了$hasOne
,$hasMany
,$belongsTo
等等。要将值id_tbl_datasheets
设置为$this->datasheet->getlastid()
。什么都行不通!当我将saveAll
更改为save
时,我会得到正确的值,但只有一个。所以我需要函数saveAll
Google是您的朋友,发现我无法getLastId()
与saveAll
一起使用。我能用什么来解决我的问题?
每个人都感谢你的答案!安迪。
答案 0 :(得分:0)
我得到了答案!
public function add_datasheet($id = null) {
$this->set('datasheetsheadings', $this->datasheetsheading->find('all', array('limit' => 0 .','. 9)));
$this->set('datasheetsheadings2', $this->datasheetsheading->find('all', array('limit' => 9 .','. 9)));
$this->set('id', $id);
if ($this->request->is('post')) {
if ($this->datasheet->save($this->request->data)) {
$last_id = $this->datasheet->id;
$val_id = 0;
foreach ($this->request->data['datasheetsvalue'] as $data_val_id) {
$val_id = $val_id + 1;
$this->request->data['datasheetsvalue'][$val_id]['id_tbl_datasheets'] = $last_id;
}
$this->datasheetsvalue->saveMany($this->request->data['datasheetsvalue']);
$this->Session->setFlash('Your Datasheet >> Lot: ' . $this->request->data['datasheetsvalue'][1]['value'] . ' << has been saved.');
$this->redirect(array('action' => 'Datasheets/' . $this->request->data['datasheet']['id_tbl_articles']));
} else {
$this->Session->setFlash('Unable to add your datasheet.');
}
}
}
我现在将使用saveMany。之前,我做了一个foreach并用我的var $ val_id设置数据[]。现在它完美无缺 不管怎样,谢谢!