0

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

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

我正在创建的数组如下:

//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++;
        }

问题是我在循环中不知道如何组合数组,以便在达到 100 时可以在循环结束时使用 saveall。如果我是对的,我必须使用索引,以便 cakephp 知道他必须插入多个客户。

希望有人可以帮助我朝着正确的方向前进。

4

1 回答 1

0

要一次保存多条记录,只需将它们作为模型别名的数字元素添加到模型数据数组中。所以你的数据看起来像:

$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);
}
于 2013-08-05T12:22:42.690 回答