在循环cakephp中组合数组

时间:2013-08-05 11:27:26

标签: arrays cakephp

我正在为我的客户进行导入,这是在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++;
        }

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

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

1 个答案:

答案 0 :(得分: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);
}