cakephp 使用 saveMany 保存许多数组

问题描述 投票:0回答:1

使用这些样本两个数组:

array(
(int) 0 => array(
    'admission_no' => '1003',
    'exam_id' => '1',
    'subject_code' => (int) 101,
    'score' => '61'
),
(int) 1 => array(
    'admission_no' => '1003',
    'exam_id' => '1',
    'subject_code' => (int) 102,
    'score' => '85'
)

array(
(int) 0 => array(
    'admission_no' => '1005',
    'exam_id' => '1',
    'subject_code' => (int) 101,
    'score' => '63'
),
(int) 1 => array(
    'admission_no' => '1005',
    'exam_id' => '1',
    'subject_code' => (int) 102,
    'score' => '14'
)

我已经设法将它们放入 saveMany() 所需的格式。我尝试过 foreach 循环,但只保存了第一个数组。它可能很简单,但由于某种原因我的循环没有按预期工作

另外..值得一提的是,上面的数组是对 csv 文件进行一些操作的结果。我用来获取它们的代码在这里:

public function combineElements ($arr) {
    $columns = array('admission_no','exam_id','subject_code','score');
    $cust = array_combine($columns,$arr);
    return $cust;
    //debug($cust);
}

public function resultsUpload () {
    $modelClass = $this->modelClass;

    //populate the $data variable using CsvComponent
    $data = $this->Csv->import(($this->request->data[$modelClass]['result']['tmp_name']));
    //get the exam category passed from the $_POST variable
    $exam_cat = $this->request->data[$modelClass]['exam_id'];
    //debug($data);

    //$columns = array('admission_no','exam_id','subject_code','score');
    //manipulate $data array to get values as desired
    foreach ($data as $value) {
         //remove the first element of $value and retain the indexes to retrieve subjects and scores
         $new_sliced = array_slice($value, 1,(sizeof($value) - 1),true);
        $subject = array_keys($new_sliced);
        $scores = array_values($new_sliced);
        $number = array_shift($value);
         $result_data = array();
        for ($i = 0; $i < count($subject); $i++) {
        $result_data[] = $number;
        $result_data[] = $exam_cat;
        $result_data[] = $subject[$i];
        $result_data[] = $scores[$i];
        }
        //debug($result_data);
       $customized = array_chunk($result_data,4);
      //debug($customized);
      $data_set = array_map(array($this, 'combineElements'),$customized);
      debug($data_set);
       $this->$modelClass->create();

     if($this->$modelClass->saveMany($k, array(
        'validate' => false, 'atomic' => true
      ))){
            $this->Session->setFlash(__('Results uploaded successfully'));
            $this->redirect(array('action' => 'index'));
      }else {
        $this->Session->setFlash(__('Could not upload results.Check for errors then try again'));
        $this->redirect(array('action' => 'resultsUpload'));
      }
    }
    }
    $exams = $this->ExamsScore->Exam->find('list',array('fields' => array('exam_type')));
     $this->set('modelClass',$modelClass);
     $this->set('exams',$exams);
     $this->render('../Common/upload');
    // debug($exams);
}

上面的数组是debug($data_set)的结果

php arrays cakephp
1个回答
0
投票

尝试使用 SaveAll..

 if($this->$modelClass->saveAll($data, array(
    'validate' => false, 'atomic' => true
  ))){}

还有一件事是 $k 在 saveMany 函数中代表什么。

编辑..

确保在 saveMany 或 saveAll 中,传递数组,如下所示:

array(
    0 => array(
            'MyModel' => array(
                'admission_no' => '1005',
                'exam_id' => '1',
                'subject_code' => (int) 101,
                'score' => '63'
            )
        ),
    1 => array(
        'MyModal' => array(
            'admission_no' => '1005',
            'exam_id' => '1',
            'subject_code' => (int) 102,
            'score' => '14'
        )
    )
);
© www.soinside.com 2019 - 2024. All rights reserved.