php - Laravel - How to chain Eloquent relationship - Eager Loading -


i'm using laravel 5.4, laravel roles here , eloquent relationships.

i'm trying retrieve users of company along roles.

user::find(1)->roles gets me user's roles id =1

company::find(1)->users gets me users belongs company id =1 (without roles of users).

company::find(1)->users->roles returns error property [roles] not exist on collection instance.

questions

  1. is possible want ?
  2. if so, how should ?

user.php

class user extends authenticatable {     use hasroleandpermission;      public function company()     {         return $this->belongsto('app\company');     }      public function user()     {         return $this->belongsto(user::class);     } } 

hasroleandpermission.php

trait hasroleandpermission {     public function roles()     {         return $this->belongstomany(config('roles.models.role'));     } } 

company.php

class company extends model {     public function users() {         return $this->hasmany('app\user');     } } 

1 company has many users.

1 users has many roles.

you trying roles of collection of users (the property exists 1 user) thus, property doesn't exists collection.

if want roles of users in company, might try above code:

$roles = []; company::find(1)->users->foreach(function($user) {     $roles = array_merge($roles, $user->roles); }); 

--------- edit ---------

for eager loading roles of users, must use with, suggested @ohgodwhy, i'd refactor little:

$users = user::with('roles')->where('company_id', $companyid)->get(); 

now have array of users eager loading roles. still can't access directly $users->roles, must first user, roles.


Comments

Popular posts from this blog

Command prompt result in label. Python 2.7 -

javascript - How do I use URL parameters to change link href on page? -

amazon web services - AWS Route53 Trying To Get Site To Resolve To www -