From e5bf2458f28d4f4f826053c9dc04da31434c8e08 Mon Sep 17 00:00:00 2001 From: Jarek Jakubowski Date: Fri, 14 Jun 2019 22:11:45 +0200 Subject: [PATCH] Allow using other key column than "id" during insertOrUpdate Also update code for PHP 7.1 --- src/JarJak/SqlPreparator.php | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/JarJak/SqlPreparator.php b/src/JarJak/SqlPreparator.php index a37549c..da4067c 100644 --- a/src/JarJak/SqlPreparator.php +++ b/src/JarJak/SqlPreparator.php @@ -9,7 +9,7 @@ /** * Separated class to ease testing and wrapping prepared SQLs into your own DB Abstraction * - * @author Jarek Jakubowski + * @author Jarek Jakubowski */ class SqlPreparator { @@ -56,7 +56,10 @@ public static function prepareInsertOrUpdate(string $table, array $values, array } } $sql .= implode(', ', $updateArray); - $sql .= ', id=LAST_INSERT_ID(id)'; + + if (! in_array('id', $ignoreForUpdate, true)) { + $sql .= ', id=LAST_INSERT_ID(id)'; + } return [ 'sql' => $sql, @@ -82,11 +85,7 @@ public static function prepareMultiInsertOrUpdate(string $table, array $rows, ar $columns = static::escapeSqlWords($columns); $ignoreForUpdate = static::escapeSqlWords($ignoreForUpdate); - /** - * since PHP 7.1 this can look like: - * ['params' => $params, 'valueParts' => $valueParts] = static::generateMultiParams($rows, $columns) - */ - [$params, $valueParts] = array_values(static::generateMultiParams($rows, $columns)); + ['params' => $params, 'valueParts' => $valueParts] = static::generateMultiParams($rows, $columns); $sql = 'INSERT INTO ' . static::escapeSqlWords($table); $sql .= ' (' . implode(', ', $columns) . ')'; @@ -127,7 +126,7 @@ public static function prepareMultiInsert(string $table, array $rows, array $col } $columns = static::escapeSqlWords($columns); - [$params, $valueParts] = array_values(static::generateMultiParams($rows, $columns)); + ['params' => $params, 'valueParts' => $valueParts] = static::generateMultiParams($rows, $columns); $sql = 'INSERT INTO ' . static::escapeSqlWords($table) . ' ('; $sql .= implode(', ', $columns); @@ -193,7 +192,7 @@ public static function prepareMultiInsertIgnore(string $table, array $rows, arra } $columns = static::escapeSqlWords($columns); - [$params, $valueParts] = array_values(static::generateMultiParams($rows, $columns)); + ['params' => $params, 'valueParts' => $valueParts] = static::generateMultiParams($rows, $columns); $sql = 'INSERT IGNORE INTO ' . static::escapeSqlWords($table) . ' ('; $sql .= implode(', ', $columns);