@@ -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