我遇到了需要在laravel 4中使用相关对象批量保存对象的情况。基本上我正在做的是对象的批量插入,其中每个对象可以有许多标记(多对多)关系)。
以下是一些示例代码,请注意TODO评论:
[...]
$batchData = array();
$rowCount = 0;
foreach ($dataArray as $key => $row) {
[...]
// parsing row from CSV
$obj = array();
foreach ($row as $attribute => $value) {
$obj['template_id'] = $templateId;
$obj['batch_id'] = $batchId;
$obj['user_id'] = $confideUserId;
$obj['created_at'] = new \DateTime;
$obj['updated_at'] = new \DateTime;
// Attach Tags if any exist
if ($attribute === 'tags') {
if (!is_null($value) || !is_empty($value)) {
$tags = explode(":", $value);
// TODO: Get tag ID for each tag and add to $obj['tags'] array
}
}
}
// add object to array
$batchData[$rowCount] = $obj;
++$rowCount;
if ($rowCount == \Config::get('app.maxCSV')) {
try {
// TODO: Batch Insert With Related tags??
$obj_model_name::insert($batchData);
} catch (Exception $e) {
return false;
}
$rowCount = 0;
$batchData = array();
}
}
[...]
我可以逐个插入每个对象的关系,但问题是我们通过CSV批量插入这些对象,我们可以在这里拥有数百到数十万个对象。
任何人都有任何提示吗?
仅供参考,正在使用的数据库是MSSQL 2012。
干杯,
答案 0 :(得分:1)
在进一步研究之后,我得出的结论是,最好重新考虑我的逻辑。我现在单独保存每个对象,然后将标签分配给该对象并重复所有对象。
当有许多对象时,这可能效率不高,但截至目前这不是一个可预见的问题。