1

Cakephp 2.0 の saveAll に関する私の問題を解決するために、あなたの助けが必要です。Datasheet、Datasheetsheading、および Datasheetsvalues の 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): 、、、、、。これは完璧に機能します! datasheetsvalue テーブルで値を取得します: 、、、および。私が得るだけで。、、などでたくさん試しました。値もに設定します。何も機能しません!!! に変更すると、正しい値が得られますが、1つだけです。だから私は関数が必要です。 Google はあなたの友達ですが、私は. 問題を解決するために何を使用できますか? id_tbl_articlescommentcreatedmodified
id(auto_increment)id_tbl_datasheetsheadingsid_tbl_articlesvaluesprintid_tbl_datasheetsNULL$hasOne$hasMany$belongsToid_tbl_datasheets$this->datasheet->getlastid()saveAllsavesaveAll
getLastId()saveAll

皆さん、ご回答ありがとうございます!アンディ。

4

1 に答える 1

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 で data[] を設定しました。今では完璧に動作します。
とにかくありがとう!

于 2012-10-24T17:23:08.150 に答える