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
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 |