上传csv文件并将数据保存在cakephp 3的数据库中

时间:2016-09-28 07:28:31

标签: cakephp-3.0

如何上传csv文件并将数据保存到我的mysql数据库中。 根据id.in cakephp 3 我无法做到这一点。谁能帮我。 我的控制器     public function import(){

    if(isset($_POST["submit"])){
        if($_FILES['file']['csv']){
            $filename = explode('.', $_FILES['file']['csv']);
            debug($filename);
            if($filename[1]=='csv'){
                $handle = fopen($_FILES['file']['csv'], "r");
                while ($data = fgetcsv($handle)){
                    $item1 = $data[0];
                  //  $item2 = $data[1];
                  //  $item3 = $data[2];
                  //  $item4 = $data[3];
                    $Applicants = $this->Applicants->patchEntity($Applicants, $item1);
                    $this->Applicants->save($Applicants);
                }
                fclose($handle);
            }
        }
    }
    $this->render(FALSE);
}

我的观点:

<div class="col-md-8">
        <?= $this->Form->create('Applicants',['type' => 'file','url' => ['controller'=>'Applicants','action' => 'import'],'class'=>'form-inline','role'=>'form',]) ?>
        <div class="form-group">
            <label class="sr-only" for="csv"> CSV </label>
            <?php echo $this->Form->input('csv', ['type'=>'file','class' => 'form-control', 'label' => false, 'placeholder' => 'csv upload',]); ?>
        </div>
        <button type="submit" class="btn btn-default"> Upload </button>
    <?= $this->Form->end() ?>
</div>

2 个答案:

答案 0 :(得分:1)

您的问题有点不清楚您想在控制器中做什么,您想要更新现有记录还是保存新数据。如果您想要更新,那么只需要使用patchEntity。

patchEntity应该有一个数据库实体,你可以根据需要更改或更新数据,所以如果你的第一列包含Applications表的id,那么下面的代码可以工作,你可以在$ data中写下你想要更新的任何字段或添加

因此您可以使用以下代码块

public function import() {
    if(isset($_POST["submit"])){
        if($_FILES['file']['csv']){
            $filename = explode('.', $_FILES['file']['csv']);
            debug($filename);
            if($filename[1]=='csv'){

                $handle = fopen($_FILES['file']['csv'], "r");
                while ($data = fgetcsv($handle)){
                    $item1 = $data[0];

                    $data = array(
                        'fieldName' => $item1
                    );
                  //  $item2 = $data[1];
                  //  $item3 = $data[2];
                  //  $item4 = $data[3];
                    $Applicant = $this->Applicants->newEntity($data);
                    $this->Applicants->save($Applicant);
                }
                fclose($handle);
            }
        }
    }
    $this->render(FALSE);
}

如果您有更具体的代码/要求,请分享,以便我可以相应地帮助您。

答案 1 :(得分:0)

这是我上传csv文件和保存数据库的解决方案 公共函数导入($ id = NULL){

    $data = $this->request->data['csv'];
    $file = $data['tmp_name'];
    $handle = fopen($file, "r");
    while (($row = fgetcsv($handle, 1000, ",")) !== FALSE) {

        if($row[0] == 'id') {
            continue;
        }

        $Applicants = $this->Applicants->get($row[0]);
        $columns = [
            'written_mark' => $row[1],
            'written_comments' => $row[2],
            'viva_mark' => $row[3],
            'viva_comments' => $row[4]
        ];
        $Applicant = $this->Applicants->patchEntity($Applicants, $columns);
        $this->Applicants->save($Applicant);
    }

    fclose($handle);
    $this->set('title','Upload Student CSV File Input Number and others');
    return $this->redirect($this->referer());
}