Skip to content

Latest commit

 

History

History
52 lines (41 loc) · 1.51 KB

README.md

File metadata and controls

52 lines (41 loc) · 1.51 KB

Extend Laravel HasMany relationship with KeyBy method

Latest Version on Packagist GitHub Workflow Status Total Downloads

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

  1. 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
  2. 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