orptech / laravel-migration-partition
Laravel extensions that extends Illuminate to enable partitioned table creation within Laravel migrations.
Package info
github.com/orptech-com/laravel-migration-partition
pkg:composer/orptech/laravel-migration-partition
Requires
- php: ^8.3
- illuminate/console: ^13.0
- illuminate/contracts: ^13.0
- illuminate/database: ^13.0
- illuminate/filesystem: ^13.0
- illuminate/support: ^13.0
- spatie/laravel-package-tools: ^1.90
Requires (Dev)
- larastan/larastan: ^3.0
- laravel/pint: ^1.2
- nunomaduro/collision: ^8.5
- orchestra/testbench: ^11.0.0
- pestphp/pest: ^4.0
- pestphp/pest-plugin-arch: ^4.0
- pestphp/pest-plugin-laravel: ^4.0
- phpstan/extension-installer: ^1.4
- phpstan/phpstan-deprecation-rules: ^2.0
- phpstan/phpstan-phpunit: ^2.0
- spatie/laravel-ray: ^1.4
Suggests
None
Provides
None
Conflicts
None
Replaces
None
- dev-main
- v13.1.0
- v13.0.1
- v13.0.0
- v13.0.0-beta
- v12.0.1
- v12.0.0
- v11.0.0
- v4.0.4
- v4.0.3
- v4.0.2
- v4.0.1
- v4.0.0
- v3.0.0
- v3.0.0-beta.2
- v3.0.0-beta.1
- v3.0.0-beta
- v2.0.0
- v2.0.0-beta.1
- v2.0.0-alpha
- v1.0.6
- v1.0.5
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- dev-ArdaKaraderi-patch-8
- dev-laravel-13.x-dev
- dev-laravel-12.x-dev
- dev-ArdaKaraderi-patch-7
- dev-laravel-11.x
- dev-ArdaKaraderi-patch-6
- dev-ArdaKaraderi-patch-5
- dev-ArdaKaraderi-patch-4
- dev-ArdaKaraderi-patch-3
- dev-ArdaKaraderi-patch-2
- dev-ArdaKaraderi-patch-1
- dev-v3-beta
- dev-hash-list-partitions
This package is not auto-updated.
Last update: 2026-10-09 15:52:21 UTC
README
Database Partitions via Migrations for Laravel (aka Laravel Migration Partitions)
This package extends Illuminate to provide partitioned table creation in migrations for PostgreSQL, MySQL and MariaDB.
ORPtech Software
We are ORPtech. Here at ORPtech, we pride ourselves in ensuring that clients and services have a peaceful, safe and smooth interaction. We know how difficult it is to build trust for a service, therefore we are here to help bridge the gaps within the market via our robust applications. Please contact us for further information on how our services might help your business.
Version Matching
| Package Version | Supported |
|---|---|
| 11.x.x | Laravel 11 |
| 12.x.x | Laravel 12 |
| 13.x.x | Laravel 13 |
Installation
You can install the package via composer:
composer require orptech/laravel-migration-partition
DBMS Support
- PostgreSQL
- MySQL
- MariaDB
Planned Development
- SQL Server 2017+
- SQLite 3.8.8+
Usage
The same API works for PostgreSQL, MySQL and MariaDB. The package picks the grammar from your connection's driver.
MySQL / MariaDB
MySQL and MariaDB keep partitions inside the partitioned table instead of as separate tables, so a few things work differently:
- Range partitioned tables use
RANGE COLUMNSand get a{table}_defaultpartition for values belowMAXVALUE. New range partitions are split off from it, so create them in ascending order. Only the end value is used. UsedateTimerather thantimestampcolumns as range keys. - List partitioned tables use
LIST COLUMNSand get a{table}_defaultpartition that holdsNULL. Pass integers (not numeric strings) as list values for integer columns. - Hash partitioned tables use
KEYpartitioning. EachcreateHashPartitioncall adds one partition. MySQL ignores the modulus and remainder because it distributes rows itself. You can't attach or detach hash partitions. attachRangePartition/attachListPartitionadd a partition named after the table you pass and move that table's rows into it. The table stays behind, empty.detachPartitionmoves the partition's rows into a new table named after the partition, then drops the partition.- Every primary/unique key must include the partition column, as in PostgreSQL. You can keep
$table->id()with a composite key such as'id', 'created_at'.
PostgreSQL
PostgreSQL also known as Postgres, is a free and open-source relational database management system (RDBMS) emphasizing extensibility and SQL compliance.
Range Partitioning
Instead of importing Illuminate's Schema import this package's schema:
use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema;
Template Usage
Range Partition
use ORPTech\MigrationPartition\Database\Schema\Blueprint; use ORPTech\MigrationPartition\Support\Facades\Schema; Schema::createRangePartitioned('[YourTableNameHere]', function (Blueprint $table) { //... }, '[compositeKeyOne]', '[compositeKeyTwo]', '[rangePartitionKey]');
Enter null for [compositeKeyOne], [compositeKeyTwo] if you don't need a primary key.
Creating a Range Partition for a Partitioned Table
use ORPTech\MigrationPartition\Database\Schema\Blueprint; use ORPTech\MigrationPartition\Support\Facades\Schema; Schema::createRangePartition('[YourPartitionedTableNameHere]', function (Blueprint $table) {}, '[suffixForPartition]', '[startDate]', '[endDate]');
Attaching a Range Partition to a Partitioned Table
use ORPTech\MigrationPartition\Database\Schema\Blueprint; use ORPTech\MigrationPartition\Support\Facades\Schema; Schema::attachRangePartition('[YourPartitionedTableNameHere]', function (Blueprint $table) {}, '[suffixForPartition]', '[startDate]', '[endDate]');
List Partition
use ORPTech\MigrationPartition\Database\Schema\Blueprint; use ORPTech\MigrationPartition\Support\Facades\Schema; Schema::createListPartitioned('[YourTableNameHere]', function (Blueprint $table) { //... }, '[compositeKeyOne]', '[compositeKeyTwo]', '[listPartitionKey]');
Enter null for [compositeKeyOne], [compositeKeyTwo] if you don't need a primary key.
Creating a List Partition for a Partitioned Table
use ORPTech\MigrationPartition\Database\Schema\Blueprint; use ORPTech\MigrationPartition\Support\Facades\Schema; Schema::createListPartition('[YourPartitionedTableNameHere]', function (Blueprint $table) {}, '[suffixForPartition]', '[listPartitionValue]');
Attaching a List Partition to a Partitioned Table
use ORPTech\MigrationPartition\Database\Schema\Blueprint; use ORPTech\MigrationPartition\Support\Facades\Schema; Schema::attachListPartition('[YourPartitionedTableNameHere]', function (Blueprint $table) {}, '[suffixForPartition]', '[listPartitionValue]');
Hash Partition
use ORPTech\MigrationPartition\Database\Schema\Blueprint; use ORPTech\MigrationPartition\Support\Facades\Schema; Schema::createHashPartitioned('[YourTableNameHere]', function (Blueprint $table) { //... }, '[compositeKeyOne]', '[compositeKeyTwo]', '[hashPartitionKey]');
Enter null for [compositeKeyOne], [compositeKeyTwo] if you don't need a primary key.
Creating a Hash Partition for a Partitioned Table
use ORPTech\MigrationPartition\Database\Schema\Blueprint; use ORPTech\MigrationPartition\Support\Facades\Schema; Schema::createHashPartition('[YourPartitionedTableNameHere]', function (Blueprint $table) {}, '[suffixForPartition]', '[hashModulus]', '[hashRemainder]');
Attaching a Hash Partition to a Partitioned Table
use ORPTech\MigrationPartition\Database\Schema\Blueprint; use ORPTech\MigrationPartition\Support\Facades\Schema; Schema::attachHashPartition('[YourPartitionedTableNameHere]', function (Blueprint $table) {}, '[suffixForPartition]', '[hashModulus]', '[hashRemainder]');
Removing a Partition
use ORPTech\MigrationPartition\Database\Schema\Blueprint; use ORPTech\MigrationPartition\Support\Facades\Schema; Schema::detachPartition('[YourPartitionedTableNameHere]', function (Blueprint $table) {}, '[partitionTableName]');
Commands
New Series of Range Partition Migrations
This command will create a new series of migrations for all range partitioned tables.
php artisan partition:range
New Series of List Partition Migrations
This command will create a new series of migrations for all list partitioned tables.
php artisan partition:list
New Series of Hash Partition Migrations
This command will create a new series of migrations for all hash partitioned tables.
php artisan partition:hash
Listing Partitions
This command will list all the partitioned tables.
php artisan partition:partitions
Important
- This package currently supports PostgreSQL Range Partitions.
- You shouldn't define any primary keys in your migration. The package creates a composite key while setting up the table.
- You need to create an initial partition to start using the tables. (PostgreSQL)
Testing
composer test
Changelog
Please see CHANGELOG for more information on what has changed recently.
Security Vulnerabilities
Please review our security policy on how to report security vulnerabilities.
Credits
License
The MIT License (MIT). Please see License File for more information.