Skip to content

Commit 99a33ae

Browse files
authored
Add support pgsql for updateWithTwoIndex
1 parent 4b54316 commit 99a33ae

File tree

1 file changed

+28
-7
lines changed

1 file changed

+28
-7
lines changed

src/Batch.php

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,8 @@ public function updateWithTwoIndex(Model $table, array $values, string $index =
169169
{
170170
$final = [];
171171
$ids = [];
172+
$connection = config('database.default');
173+
$driver = config("database.connections.{$connection}.driver");
172174

173175
if (!count($values)) {
174176
return false;
@@ -183,19 +185,38 @@ public function updateWithTwoIndex(Model $table, array $values, string $index =
183185
$ids2[] = $val[$index2];
184186
foreach (array_keys($val) as $field) {
185187
if ($field !== $index || $field !== $index2) {
186-
$finalField = $raw ? Common::mysql_escape($val[$field]) : '"' . Common::mysql_escape($val[$field]) . '"';
188+
$finalField = $raw ? Common::mysql_escape($val[$field]) : "'" . Common::mysql_escape($val[$field]) . "'";
187189
$value = (is_null($val[$field]) ? 'NULL' : $finalField);
188-
$final[$field][] = 'WHEN (`' . $index . '` = "' . Common::mysql_escape($val[$index]) . '" AND `' . $index2 . '` = "' . $val[$index2] . '") THEN ' . $value . ' ';
190+
191+
if ($driver == 'pgsql') {
192+
$final[$field][] = 'WHEN (' . $index . ' = \'' . Common::mysql_escape($val[$index]) . '\' AND ' . $index2 . ' = \'' . $val[$index2] . '\') THEN ' . $value . ' ';
193+
}
194+
else {
195+
$final[$field][] = 'WHEN (`' . $index . '` = "' . Common::mysql_escape($val[$index]) . '" AND `' . $index2 . '` = "' . $val[$index2] . '") THEN ' . $value . ' ';
196+
}
189197
}
190198
}
191199
}
192200

193-
$cases = '';
194-
foreach ($final as $k => $v) {
195-
$cases .= '`' . $k . '` = (CASE ' . implode("\n", $v) . "\n"
196-
. 'ELSE `' . $k . '` END), ';
201+
202+
if ($driver == 'pgsql') {
203+
$cases = '';
204+
foreach ($final as $k => $v) {
205+
$cases .= '"' . $k . '" = (CASE ' . implode("\n", $v) . "\n"
206+
. 'ELSE "' . $k . '" END), ';
207+
}
208+
209+
$query = "UPDATE \"" . $this->getFullTableName($table) . '" SET ' . substr($cases, 0, -2) . " WHERE \"$index\" IN('" . implode("','", $ids) . "') AND \"$index2\" IN('" . implode("','", $ids2) . "');";
210+
//$query = "UPDATE \"" . $this->getFullTableName($table) . "\" SET " . substr($cases, 0, -2) . " WHERE \"$index\" IN(" . '"' . implode('","', $ids) . '")' . " AND \"$index2\" IN(" . '"' . implode('","', $ids2) . '"' . " );";
211+
}
212+
else {
213+
$cases = '';
214+
foreach ($final as $k => $v) {
215+
$cases .= '`' . $k . '` = (CASE ' . implode("\n", $v) . "\n"
216+
. 'ELSE `' . $k . '` END), ';
217+
}
218+
$query = "UPDATE `" . $this->getFullTableName($table) . "` SET " . substr($cases, 0, -2) . " WHERE `$index` IN(" . '"' . implode('","', $ids) . '")' . " AND `$index2` IN(" . '"' . implode('","', $ids2) . '"' . " );";
197219
}
198-
$query = "UPDATE `" . $this->getFullTableName($table) . "` SET " . substr($cases, 0, -2) . " WHERE `$index` IN(" . '"' . implode('","', $ids) . '")' . " AND `$index2` IN(" . '"' . implode('","', $ids2) . '"' . " );";
199220

200221
return $this->db->connection($this->getConnectionName($table))->update($query);
201222
}

0 commit comments

Comments
 (0)