-
Notifications
You must be signed in to change notification settings - Fork 0
Exposed Surface
github-actions[bot] edited this page Aug 12, 2026
·
1 revision
Nothing is exposed by accident.
- A model only becomes queryable once it opts in via
toolConfig()andallowRead(). - Relations are only available when you configure them explicitly, and only with a description:
->relations([
'author' => 'The author who wrote the article.',
])A relation method existing on the model is not enough by itself. It has to be listed here to be exposed at all.
There is no way to add a relation without a description either. The description is the text the AI is shown for that relation in with and withAggregate, so an undescribed relation is simply invisible rather than present but unexplained.
The current runtime column set comes from the model schema snapshot, not from the field-description map alone.
- database columns are discovered from the table at runtime
-
visibleandhiddendecide which columns stay exposed - casts refine the detected data types
- enum columns contribute known enum values for validation hints
Field descriptions still matter, but today they are descriptive metadata, not the hard allowlist.
- Nested eager-loading paths are derived from the frozen configs of related models.
- Nested relation paths are limited by
relationPathMaxDepth. - Root model scopes are always applied to the main query.
- Related model scopes are applied when a configured relation is eager-loaded.
- Direct relation aggregates also respect the related model's configured scopes.
- Relation aggregates are supported for direct configured relations only.
- Dotted relation-path columns are supported only for relation kinds that can be translated into auto-derived join paths.
explainexpressionsselectdistinctwheregroupByorderBylimitoffsetwithwithAggregate