Brutal insert speed optimization by bypassing the ORM completely
This commit is contained in:
+13
-4
@@ -193,11 +193,20 @@ class Proposal extends BaseModel
|
||||
|
||||
// --- Insert new rows ---
|
||||
if ($changeset->newRows) {
|
||||
$newRowData = [];
|
||||
foreach ($changeset->newRows as $newRow) {
|
||||
$newRowData[] = new Row(['data' => $newRow]);
|
||||
$conn = DB::connection();
|
||||
$prepared = $conn->getPdo()->prepare('INSERT INTO rows (data) VALUES (?)');
|
||||
|
||||
foreach (array_chunk($changeset->newRows, 10000) as $i => $chunk) {
|
||||
$ids = [];
|
||||
foreach ($chunk as $newRow) {
|
||||
$prepared->execute([json_encode($newRow)]);
|
||||
$ids[] = $conn->getPdo()->lastInsertId();
|
||||
}
|
||||
|
||||
$qms = rtrim(str_repeat('('.$newRevision->id.', ?),', count($ids)), ',');
|
||||
$conn->statement('INSERT INTO revision_row_pivot (revision_id, row_id) VALUES '.$qms.';',
|
||||
$ids);
|
||||
}
|
||||
$newRevision->rows()->saveMany($newRowData);
|
||||
}
|
||||
|
||||
$newRevision->update(['row_count' => $newRevision->rows()->count()]);
|
||||
|
||||
Reference in New Issue
Block a user