Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Rest Ql Laravel Package

matteomeloni/laravel-rest-ql

A Laravel package that adds a REST query language layer to your APIs, letting clients filter, sort, and shape responses through request parameters without writing custom endpoint logic.

View on GitHub
Deep Wiki
Context7

Getting Started

This release is a compatibility release, not a feature release: 1.0.5 adds Laravel 9 support. The practical takeaway is that ^1.0.5 is the first version you can safely install on a Laravel 9 application, so treat that as your floor constraint rather than ^1.0.

  1. Check the constraint first. Before installing, confirm the package actually widened its illuminate/* requirements rather than only tagging a release:
    composer show vendor/package --all | grep -A5 requires
    
    You want to see something like illuminate/support: ^8.0|^9.0 (or ^9.0). If the require block still caps at ^8.0, the tag alone won't let Composer resolve on Laravel 9 and you'll get a wall of your requirements could not be resolved output.
  2. Install with dependency updates. Widened Laravel constraints usually come with widened transitive constraints, so a plain composer require can fail against a stale lock file:
    composer require "vendor/package:^1.0.5" -W
    
  3. Publish and smoke-test. Most Laravel packages expose a config file and/or migrations. Run the publish step and a single end-to-end call in tinker or a test before wiring it into feature code:
    php artisan vendor:publish --provider="Vendor\Package\PackageServiceProvider"
    php artisan migrate
    
  4. Where to look first when something misbehaves: the package composer.json (source of truth for what it claims to support), its service provider (what it registers, binds, and publishes), and its CHANGELOG/release history (to see whether 1.0.5 was a one-line constraint bump or included code changes).

First real use case: take the one place in your app that would benefit most from the package, wrap the call in a thin adapter of your own, and cover it with a single feature test. That gives you a fast yes/no on Laravel 9 compatibility without committing to a wide rollout.

Implementation Patterns

Pin to the compatibility floor in composer.json, not just the lock file. During a Laravel 8 → 9 migration you'll have a mix of applications. Set "vendor/package": "^1.0.5" explicitly so nobody accidentally resolves 1.0.4 on a Laravel 9 app via --prefer-lowest in CI.

Contain the package behind your own boundary. Regardless of what the package does, a one-class adapter keeps the blast radius small when a future major release changes method signatures:

interface ThingContract
{
    public function handle(array $payload): mixed;
}

final class PackageThing implements ThingContract
{
    public function __construct(private \Vendor\Package\Client $client) {}

    public function handle(array $payload): mixed
    {
        return $this->client->send($payload);
    }
}

Bind it in a PackageServiceProvider of your own and inject ThingContract everywhere. When 2.0 lands you rewrite one class.

Prefer auto-discovery but verify it. Laravel 9 still honours dont-discover and extra.laravel.providers. If the package was previously registered manually in config/app.php, remove the duplicate now — double registration is a classic source of "config published twice / listener fired twice" bugs after an upgrade.

Configuration over code. Read package settings from config/ and reference them via env() only inside the config file. This survives config:cache, which is the single most common reason a package "works locally but not in production."

Queue and console integration. If the package does network or heavy work, wrap invocations in a job and let the package run inside the worker:

final class SyncThing implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable;

    public function handle(ThingContract $thing): void
    {
        $thing->handle($this->payload);
    }
}

Test with Queue::fake() + Queue::assertPushed() so your suite never hits the package's transport.

Test matrix during migration. Keep a CI job on Laravel 8 with the same package version and one on Laravel 9. Add --prefer-lowest to at least one leg:

strategy:
  matrix:
    laravel: ["^8.0", "^9.0"]
    php: ["8.0", "8.1"]

This catches the case where the package claims Laravel 9 support but only exercises it on PHP 8.1.

Debug with Composer's dependency tree. composer why-not vendor/package 1.0.5 tells you exactly which constraint is blocking the upgrade — almost always a transitive illuminate/* or symfony/* pin from another package.

Gotchas and Tips

"Supports Laravel 9" is a claim, not a test result. A one-line release note usually means the composer.json constraint was widened. Check whether the package's own CI actually runs against Laravel 9, and whether the release touched any code. If the diff is only composer.json, treat it as installable rather than verified and lean on your own feature test.

Laravel 9 requires PHP 8.0+. If your fleet still has 7.4 hosts, adopting 1.0.5 forces the PHP upgrade first. Check extensions the package needs (bcmath, intl, gd) are present on the target runtime, not just your dev box.

Transitive breakage from Symfony 6 / Flysystem 3. Laravel 9 moved to Symfony 6 components and Flysystem 3. If the package touches the filesystem, mail, or HTTP client, verify behaviour rather than just install success — Flysystem 3 changed exception types and path handling, and the mail layer moved to Symfony Mailer. A package that passed on Laravel 8 may silently behave differently on 9 without any change to its own code.

Use -W (--with-all-dependencies). Upgrading the package without updating its transitive constraints is the number one cause of a failed Laravel 9 upgrade. Also avoid mixing composer update vendor/package with a stale composer.lock committed from a Laravel 8 build.

Watch for PHP 8 deprecations surfacing in old code paths. Passing null to non-nullable internal parameters now emits deprecations. Turn APP_DEBUG=true on a staging run and grep storage/logs/laravel.log after exercising the package — these are cheap to fix now and become errors later.

Laravel 9 removals that commonly hit packages: the $dates property on models, assertTimesSent, the old Str/Arr helpers deprecated in favour of Illuminate\Support\Str, and the resources/lang → lang directory move. If the package ships translations or model traits, confirm they still resolve.

Extension points to prefer: container bindings for the package's interfaces (swap implementations in tests), published config for behaviour toggles, and macros/events for additive customisation. Avoid subclassing package classes or editing published migrations after they've run — both make future upgrades painful.

Pin and document. Record ^1.0.5 in composer.json, note in your upgrade doc that Laravel 9 requires this version, and add a changelog entry. The next person to run composer update on a Laravel 9 branch should not have to rediscover this.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
ignibyte/aic-framework
glavweb/data-schema-bundle
glavweb/datagrid-bundle
tacticmedia/scim-server
uni-method/frame
neika-ai/sdk
adachsoft/php-code-style
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
adachsoft/api-version-bundle
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox