/** * {@inheritdoc} */ protected function write(array $data) { $keys = $this->newQuery()->lists('key'); $insertData = Arr::dot($data); $updateData = []; $deleteKeys = []; foreach ($keys as $key) { if (isset($insertData[$key])) { $updateData[$key] = $insertData[$key]; } else { $deleteKeys[] = $key; } unset($insertData[$key]); } foreach ($updateData as $key => $value) { $this->newQuery()->where('key', '=', $key)->update(['value' => $value]); } if ($insertData) { $this->newQuery(true)->insert($this->prepareInsertData($insertData)); } if ($deleteKeys) { $this->newQuery()->whereIn('key', $deleteKeys)->delete(); } }