我正在为我的客户进行导入,这是在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知道他必须插入多个客户。
希望有人可以帮助我朝着正确的方向前进。
答案 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);
}