hulkur / laravel-hasmany-keyby
Add possibility to have related models in many-to-many relationship attached to the parent model by defined key values.
Installs: 37 791
Dependents: 0
Suggesters: 0
Security: 0
Stars: 4
Watchers: 2
Forks: 1
Open Issues: 0
Requires
- php: ^8.2
- illuminate/database: ^11.0|^12.0
- illuminate/support: ^11.0|^12.0
Requires (Dev)
- brianium/paratest: ^7.0
- doctrine/persistence: ^2.0
- mockery/mockery: ^1.6
- nunomaduro/collision: ^8.1
- orchestra/testbench: ^9.5|^10.0
- phpstan/phpstan: ^2.0
README
Adds possibility to have related models in many-to-many relationship attached to the parent model by defined key values.
Usually it would be related model id
.
call:
$users = User::with('groups')->all()
laravel default:
$user->groups = [0 => $group];
New usage with keyBy:
class User extends Model { use HasManyKeyByRelationship; public function groups() { return $this->hasMany(Group::class)->keyBy('id'); // can be string or callable } }
result:
$user->groups = [$group->id => $group];
Some real life use cases
-
When you need to target order items by product id to apply order discounts.
- Ex: discount for specific product on order total/shipping method etc
-
When you need to manipulate pivot records in mass.
- Ex: users/groups grid where grid fields are some value in pivot record and not all pivot records exist
@foreach($users as $user) @foreach($groups as $group) {{$user->accesslevels[$group->id]?->level}} @endforeach @endforeach