@@ -172,6 +172,51 @@ public function massUpdate(string $method, array $data): array
172
172
return ['records ' => $ records ];
173
173
}
174
174
175
+ public function upsert ($ data = null , $ fieldsToMergeOn = [])
176
+ {
177
+ $ records = [];
178
+ $ updatedRecords = [];
179
+ $ createdRecords = [];
180
+
181
+ $ chunks = array_chunk ($ data , 10 );
182
+ foreach ($ chunks as $ key => $ dataChunk ) {
183
+ $ contents = [];
184
+ foreach ($ dataChunk as $ dataRow ) {
185
+ $ contents [] = (object ) [
186
+ 'fields ' => (object ) $ dataRow ,
187
+ ];
188
+ }
189
+
190
+ $ params = ['performUpsert ' => (object ) ['fieldsToMergeOn ' => $ fieldsToMergeOn ], 'records ' => $ contents ];
191
+
192
+ $ responseData = $ this ->decodeResponse (
193
+ $ this ->client ->patch ($ this ->getEndpointUrl (), $ params )
194
+ );
195
+
196
+ if ($ responseData ->has ('records ' )) {
197
+ $ records += $ responseData ->get ('records ' );
198
+ }
199
+
200
+ if ($ responseData ->has ('updatedRecords ' )) {
201
+ $ updatedRecords += $ responseData ->get ('updatedRecords ' );
202
+ }
203
+
204
+ if ($ responseData ->has ('createdRecords ' )) {
205
+ $ createdRecords += $ responseData ->get ('createdRecords ' );
206
+ }
207
+
208
+ if (isset ($ chunks [$ key + 1 ])) {
209
+ usleep ($ this ->delay );
210
+ }
211
+ }
212
+
213
+ return collect ([
214
+ 'records ' => $ records ,
215
+ 'updatedRecords ' => $ updatedRecords ,
216
+ 'createdRecords ' => $ createdRecords ,
217
+ ]);
218
+ }
219
+
175
220
public function delete (string $ id )
176
221
{
177
222
$ url = $ this ->getEndpointUrl ($ id );
0 commit comments