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
- is possible want ?
 - 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
Post a Comment