korridor/laravel-has-many-merged
| Install | |
|---|---|
composer require korridor/laravel-has-many-merged |
|
| Latest Version: | 1.3.0 |
| PHP: | >=8.1 |
| Laravel: | 10 – 13 |
| Older releases: | 6 – 9 |
| License: | MIT |
| Last Updated: | Jun 19, 2026 |
| Links: | GitHub · Packagist |
Laravel has many merged
Custom relationship for Eloquent that merges/combines multiple one-to-may (hasMany) relationships. This relation fully supports lazy and eager loading.
[!NOTE] Check out solidtime - The modern Open Source Time-Tracker at solidtime.io
Installation
You can install the package via composer with following command:
composer require korridor/laravel-has-many-merged
If you want to use this package with older Laravel/PHP version please install the 0.* version.
composer require korridor/laravel-has-many-merged "^0"
Requirements
This package is tested for the following Laravel versions:
- 13.* (PHP 8.3, 8.4)
- 12.* (PHP 8.2, 8.3, 8.4)
- 11.* (PHP 8.2, 8.3, 8.4)
- 10.* (PHP 8.1, 8.2, 8.3)
Usage examples
In the following example there are two models User and Message. Each message has a sender and a receiver. The User model has two hasMany relations - one for the sent messages and the other for the received ones.
With this plugin you can add a relation that contains sent and received messages of a user.
use Korridor\LaravelHasManyMerged\HasManyMerged;
use Korridor\LaravelHasManyMerged\HasManyMergedRelation;
class User extends Model
{
use HasManyMergedRelation;
// ...
/**
* @return HasManyMerged<Message>
*/
public function messages(): HasManyMerged
{
return $this->hasManyMerged(Message::class, ['sender_user_id', 'receiver_user_id']);
}
/**
* @return HasMany<Message>
*/
public function sentMessages(): HasMany
{
return $this->hasMany(Message::class, 'sender_user_id');
}
/**
* @return HasMany<Message>
*/
public function receivedMessages(): HasMany
{
return $this->hasMany(Message::class, 'receiver_user_id');
}
}
Contributing
I am open for suggestions and contributions. Just create an issue or a pull request.
Local docker environment
The docker folder contains a local docker environment for development.
The docker workspace has composer and xdebug installed.
docker-compose run workspace bash
Testing
The composer test command runs all tests with phpunit.
The composer test-coverage command runs all tests with phpunit and creates a coverage report into the coverage folder.
Codeformatting/Linting
The composer fix command formats the code with php-cs-fixer.
The composer lint command checks the code with phpcs.
License
This package is licensed under the MIT License (MIT). Please see license file for more information.
Related Packages
HasMany, HasOne and MorphMany Eloquent relations with inverse hydration.
Laravel package for inspecting model classes on relations en attributes.
Version History
| Version | Released | PHP | Laravel | License |
|---|---|---|---|---|
| 1.3.0 | >=8.1 | ^10| | MIT | |
| 1.2.0 | >=8.1 | ^10| | MIT | |
| 1.1.0 | >=8.1 | ^10| | MIT | |
| 1.0.1 | >=8.1 | ^10 | MIT | |
| 1.0.0 | >=8.1 | ^10 | MIT | |
| 0.0.3 | ^7.1| | ^6| | MIT | |
| 0.0.2 | ^7.1| | ^6| | MIT | |
| 0.0.1 | ^7.1| | ^6| | MIT |