diff --git a/src/Typesense.php b/src/Typesense.php index 3d1a0d2..3f96451 100755 --- a/src/Typesense.php +++ b/src/Typesense.php @@ -1,4 +1,5 @@ 'typesense/collections/save-collection', 'typesense/sync-collection' => 'typesense/collections/sync-collection', 'typesense/flush-collection' => 'typesense/collections/flush-collection', + 'typesense/update-schema' => 'typesense/collections/update-schema', ]; } diff --git a/src/console/controllers/DefaultController.php b/src/console/controllers/DefaultController.php index 5c834a5..b4b3719 100755 --- a/src/console/controllers/DefaultController.php +++ b/src/console/controllers/DefaultController.php @@ -1,4 +1,5 @@ getCollections()->updateSchema(); + } + public function actionSync() { $indexes = Typesense::$plugin->getSettings()->collections; diff --git a/src/services/CollectionService.php b/src/services/CollectionService.php index b06e650..f5c9155 100644 --- a/src/services/CollectionService.php +++ b/src/services/CollectionService.php @@ -1,4 +1,5 @@ getClient()->client(); @@ -66,4 +64,33 @@ private function _verifyClient(): bool return true; } + + /** + * Update the schema in Typesense based on the configuration in PHP + * + * @return void + */ + public function updateSchema(): void + { + $indexes = Typesense::$plugin->getSettings()->collections; + + foreach ($indexes as $index) { + + print('Updating schema ' . $index->indexName); + print(PHP_EOL); + + $updateSchema = ['fields' => []]; + foreach ($index->schema['fields'] as $field) { + $updateSchema['fields'][] = [ + 'name' => $field['name'], + 'drop' => true + ]; + $updateSchema['fields'][] = $field; + } + Typesense::$plugin->getClient()->client()->collections[$index->indexName]->update($updateSchema); + + print('Updated schema ' . $index->indexName); + print(PHP_EOL); + } + } }