@@ -229,7 +229,11 @@ public function upsert(
229229
230230 $ table = (string ) $ query ->quoteName ($ table );
231231 $ data = TypeCast::toArray ($ data );
232- $ quotedFields = $ query ->qnMultiple (array_keys ($ data ));
232+ $ allFields = array_keys ($ data );
233+ $ valueFields = array_filter ($ allFields , fn ($ field ) => !in_array ($ field , $ keys , true ));
234+
235+ $ quotedFields = $ query ->qnMultiple ($ allFields );
236+ $ quotedValueFields = $ query ->qnMultiple ($ valueFields );
233237 $ quotedKeys = $ query ->qnMultiple ($ keys );
234238
235239 $ columns = $ query ->clause ('() ' , $ quotedFields , ', ' );
@@ -248,7 +252,7 @@ public function upsert(
248252 case AbstractPlatform::MYSQL :
249253 $ dupKeys = $ query ->clause ('' , [], ', ' );
250254
251- foreach ($ quotedKeys as $ key ) {
255+ foreach ($ quotedValueFields as $ key ) {
252256 $ dupKeys ->append ("$ key = VALUES( $ key) " );
253257 }
254258
@@ -266,12 +270,12 @@ public function upsert(
266270 $ dupKeys = $ query ->clause ('() ' , [], ', ' );
267271
268272 foreach ($ quotedKeys as $ key ) {
269- $ dupKeys ->append (" $ key = VALUES( $ key ) " );
273+ $ dupKeys ->append ($ key );
270274 }
271275
272276 $ excludeKeys = $ query ->clause ('' , [], ', ' );
273277
274- foreach ($ quotedKeys as $ key ) {
278+ foreach ($ quotedValueFields as $ key ) {
275279 $ excludeKeys ->append ("$ key = EXCLUDED. $ key " );
276280 }
277281
@@ -308,7 +312,9 @@ public function upsert(
308312
309313 $ updateSet = $ query ->clause ('' , [], ', ' );
310314
311- foreach ($ data as $ k => $ v ) {
315+ foreach ($ valueFields as $ k ) {
316+ $ v = $ data [$ k ];
317+
312318 if ($ v instanceof RawWrapper) {
313319 $ updateSet ->append ($ query ->quoteName ($ k ) . '= ' . $ v ());
314320 } else {
0 commit comments