v0.0.35

28 June 2026

Field content is now searchable through the registry query DSL via a new field_index table.

Added

  • FieldIndex (phlat/src/Data/Registry.php's field_index SQLite table, schema bumped to 4) : recomputes searchable rows for a page's data.json content on save, keyed by (uuid, key, subkey) with both a string value and an optional numeric_value.
  • FieldType::indexValues() : each fieldtype controls what it contributes to the index. Plain scalar types (number, datetime) index a single '' subkey; list/object flatten each item/property to its own subkey; file/relation opt out entirely ([]).
  • Registry::find()/rows()/count() : any condition field that isn't a structural registry column (type, view, status, etc.) is now matched against field_index via an automatic LEFT JOIN, with numeric operators (<, >, <=, >=) comparing numeric_value. sort= on a content field sorts by it too.
  • Db::transaction() : wraps a callback in begin/commit/rollback.
  • q(string $key) : query-param convenience function, shorthand for app()->request->query($key).

Changed

  • Registry::rebuild()/page indexing now also calls App::fieldIndex()->index($page) for every scanned page.