where('ContactID', $ContactID) ->where('SiteID', $detail['SiteID']) ->first(); if ($existing) { $this->update($existing[$this->primaryKey], $detail); } else { $this->insert($detail); } $keptSiteIDs[] = $detail['SiteID']; } // Delete missing rows if (!empty($keptSiteIDs)) { $this->where('ContactID', $ContactID) ->whereNotIn('SiteID', $keptSiteIDs) ->delete(); } else { $this->where('ContactID', $ContactID)->delete(); } return [ 'status' => 'success', 'inserted' => count($contactDetails) - count($keptSiteIDs), 'kept' => count($keptSiteIDs), ]; } catch (\Throwable $e) { log_message('error', 'syncDetails error: ' . $e->getMessage()); return [ 'status' => 'error', 'message' => $e->getMessage(), ]; } } }