Arrays 在循环cakephp中组合数组

Arrays 在循环cakephp中组合数组,arrays,cakephp,Arrays,Cakephp,我正在为我的客户进行一项导入工作,这是一项以100为循环的测试。在每个循环中,我可以保存该客户的阵列,但我认为将每个循环中的阵列组合起来并在达到100时将其全部保存会更快。数据来自csv文件 我想知道的第一件事是什么更好,分别保存每个循环还是在最后一次保存所有循环 我正在创建的arry如下所示: //Process file if (($handle = fopen('uploads/temp/'.$file, "r")) !== FALSE) while (

我正在为我的客户进行一项导入工作,这是一项以100为循环的测试。在每个循环中,我可以保存该客户的阵列,但我认为将每个循环中的阵列组合起来并在达到100时将其全部保存会更快。数据来自csv文件

我想知道的第一件事是什么更好,分别保存每个循环还是在最后一次保存所有循环

我正在创建的arry如下所示:

//Process file
        if (($handle = fopen('uploads/temp/'.$file, "r")) !== FALSE)
        while (  (($dop_ar = fgetcsv($handle, 10000, ";")) !== FALSE) && (($_POST['start_id']+1)*100 >= $counter) ) {

            if ($_POST['start_id']*100 <= $counter) {

                $data_customer = array(
                        "Customer" => array (
                            "id" => $dop_ar[0],
                            "factuurvoornaam" => $dop_ar[12],
                            "factuurachternaam" => $dop_ar[14]
                            ),  
                );

                $this->Customer->create();
                if ($this->Customer->save($data_customer)) {
                // handle the success.
                //echo 'ok';
                }

            }

            $counter++;
        }
//进程文件
if($handle=fopen($uploads/temp/。$file,“r”))!==FALSE)
而(($dop_ar=fgetcsv($handle,10000,“;”))!==FALSE)和($u POST['start_id']+1)*100>=$counter)){
if($\u POST['start\u id']*100数组(
“id”=>$dop_ar[0],
“factuurvoornam”=>$dop_ar[12],
“factuurachternaam”=>$dop_ar[14]
),  
);
$this->Customer->create();
如果($this->Customer->save($data\u Customer)){
//把握成功。
//回声‘ok’;
}
}
$counter++;
}
问题是我不知道如何在循环中组合数组,以便在循环结束时达到100时使用saveall。如果我是对的,我必须使用索引,以便cakephp知道他必须插入多个客户


希望有人能帮我找到正确的方向。

要一次保存多条记录,只需将它们作为模型别名的数字元素添加到模型数据数组中即可。因此,您的数据如下所示:

$dataToSave = array(
    'Customer' => array(
        array(
            'id' => 54,
            'factuurvoornaam' => 'Test',
            'factuurachternaam' => '1'
        ),
        array(
            'id' => 456,
            'factuurvoornaam' => 'Test',
            'factuurachternaam' => '2'
        ),
        array(
            'id' => 92,
            'factuurvoornaam' => 'Test',
            'factuurachternaam' => '3'
        )
    )
);
试试这个:

$customers = array();

if ($handle = fopen('uploads/temp/' . $file, 'r')) {

    while ($dop_ar = fgetcsv($handle, 10000, ';')) && (($_POST['start_id'] + 1) * 100 >= $counter)) {

        if ($_POST['start_id'] * 100 <= $counter) {

            $customers['Customer'][] = array(
                'id' => $dop_ar[0],
                'factuurvoornaam' => $dop_ar[12],
                'factuurachternaam' => $dop_ar[14]
            );
        }
        $counter++;
    }
}

if (!empty($customers)) {
    $this->Customer->saveAll($customers);
}
$customers=array();
如果($handle=fopen('uploads/temp/'。$file,'r')){
而($dop_ar=fgetcsv($handle,10000,;)&&($u POST['start_id']+1)*100>=$counter)){
如果($\u POST['start\u id']*100$dop\u ar[0],
‘factuurvoornam’=>$dop_ar[12],
‘factuurachternaam’=>$dop_ar[14]
);
}
$counter++;
}
}
如果(!空($customers)){
$this->Customer->saveAll($customers);
}

BadHorsie这是一个小改动。我必须将以下内容更改为:$customers['Customer'][]到$customers[],否则cakephp只执行了回滚,不知道为什么。当插入cakephp时,会使用计数检查每个id,这会减慢进度。我使用$this->Customer->begin();和$this->Customer->commit();现在,但这不是一个大的加速。您对提高数据插入速度有什么建议吗?是的,对不起,我没有测试,只是编写了它。我不知道对速度有什么建议,我想这只是在循环中执行这么多插入的问题。