Skip to content

Support Laravel 10 without taking on doctrine/dbal - #1

Closed
shwaeki wants to merge 1 commit into
mainfrom
laravel-10-support
Closed

shwaeki wants to merge 1 commit into
mainfrom
laravel-10-support

Conversation

@shwaeki

@shwaeki shwaeki commented Aug 30, 2026

Copy link
Copy Markdown
Owner

Laravel 11 added Schema::getColumns() and Schema::getIndexes(), which read the schema natively; Laravel 10 has neither, and the documented reason for excluding 10 was that supporting it would mean carrying doctrine/dbal for one release line.

It does not have to. SchemaIntrospector uses the native methods when they exist and otherwise runs the same driver queries itself — pragma table_info and index_list on SQLite, information_schema on MySQL, MariaDB and SQL Server, information_schema plus pg_index on PostgreSQL — returning the subset of the Laravel 11 array shape the metadata engine consumes. So the engine cannot tell which framework version it is on, and dbal is still never pulled in, on any version.

The rest is constraints and matrix. Testbench 8 pins PHPUnit 10, which Pest 3 and 4 do not support, so the Laravel 10 leg installs Pest 2; PHP 8.4 is excluded from it because Laravel 10 was never certified against it. Laravel 10's security window has closed the same way Laravel 11's has, so it joins the advisory-policy exemption. PHP 8.2 stays the floor: Laravel 10 also runs on 8.1, but 8.1 is end of life.

Verified on both ends — the full suite passes against Laravel 13 as before, and against laravel/framework 10.x with Testbench 8 and Pest 2.

Claude-Session: https://claude.ai/code/session_01E4q6Ei7sWPScqPZoF7ySnv

Laravel 11 added Schema::getColumns() and Schema::getIndexes(), which read
the schema natively; Laravel 10 has neither, and the documented reason for
excluding 10 was that supporting it would mean carrying doctrine/dbal for
one release line.

It does not have to. SchemaIntrospector uses the native methods when they
exist and otherwise runs the same driver queries itself — pragma table_info
and index_list on SQLite, information_schema on MySQL, MariaDB and SQL
Server, information_schema plus pg_index on PostgreSQL — returning the
subset of the Laravel 11 array shape the metadata engine consumes. So the
engine cannot tell which framework version it is on, and dbal is still
never pulled in, on any version.

The rest is constraints and matrix. Testbench 8 pins PHPUnit 10, which Pest
3 and 4 do not support, so the Laravel 10 leg installs Pest 2; PHP 8.4 is
excluded from it because Laravel 10 was never certified against it. Laravel
10's security window has closed the same way Laravel 11's has, so it joins
the advisory-policy exemption. PHP 8.2 stays the floor: Laravel 10 also
runs on 8.1, but 8.1 is end of life.

Verified on both ends — the full suite passes against Laravel 13 as before,
and against laravel/framework 10.x with Testbench 8 and Pest 2.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E4q6Ei7sWPScqPZoF7ySnv
@shwaeki shwaeki closed this Aug 30, 2026
@shwaeki
shwaeki deleted the laravel-10-support branch August 30, 2026 19:29
@shwaeki
shwaeki restored the laravel-10-support branch August 30, 2026 19:29
@shwaeki
shwaeki deleted the laravel-10-support branch August 30, 2026 19:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant