composer require schtzie/laravel-flowfield. The package auto-discovers its service provider; publish any config with php artisan vendor:publish --tag=flowfield-config if the README lists one.README.md for the field-definition API, then src/ for the base trait/concern and src/Scopes/ (that's where scopeWithFlowFields lives — the method named in the v1.0.1 changelog). Check tests/ for the canonical usage examples before reading the source.Builder::afterQuery() hook. Verify your framework version so you know which code path your app exercises.User::query()->withFlowFields()->get(). Confirm the attribute appears in toArray() output, which is the fastest sanity check that hydration wiring works.php artisan test and any feature tests that serialize models to JSON immediately after installing, so you can distinguish package behaviour from your own accessor logic.withFlowFields as the entry point for "add computed columns to this result set only." Prefer it over $appends for fields that are expensive or only needed on specific endpoints — appending globally pays the cost on every serialization.->with('profile')->withFlowFields()). Ordering matters less than coverage — a missing eager load turns a computed field into a silent N+1.JsonResource/toArray(). If you use API resources with explicit $this->only([...]) mappings, add the new keys there or they'll be dropped even though hydration succeeded.assertJsonPath('data.0.full_name', ...)) rather than on the model property alone — that catches both hydration failures and resource-layer omissions. Add one test that runs the scope over a paginated result and one over ->find().retrieved event fallback: without Builder::afterQuery(), the package attaches flow fields per-model on retrieval. This is functionally correct but fires an event per hydrated model — expect measurably more overhead on large result sets than the Laravel 11+ path. Benchmark any endpoint returning thousands of rows, and prefer chunked/cursor iteration over a single giant get().retrieved listeners are global: if your app (or another package) already listens to retrieved, ordering and side effects can interact. Keep your own retrieved handlers idempotent and free of writes; avoid assuming flow fields are populated at the moment your listener runs.toArray() broadly. Use makeHidden() or explicit resource mappings on models that get serialized for non-API purposes.retrieved listener or withoutEvents() call suppressed hydration.withoutEvents() and Model::withoutEvents() will break the Laravel 10 path: since the fallback depends on the retrieved event, silencing model events silently drops your flow fields. Same risk with saveQuietly-style helpers around retrieval and with test setups that disable events globally.->count(), ->sum(), ->pluck(), and DB::table() calls never hydrate models, so flow fields won't exist. Don't design a code path that expects them there.composer.json and read the changelog on each bump — the Laravel 10 fallback was added reactively, which suggests the framework-support matrix is still settling. Treat minor bumps as worth a test run rather than a blind composer update.COMPOSER_NO_AUDIT changes in v1.0.1 affect the package's own pipeline. They're a signal that maintainer CI is actively tuned, but they require no action in your application.How can I help you explore Laravel packages today?