2017-06-08 84 views
1

我的数据模型是这样的: 用户>办公室>组织Laravel雄辩 - 获取子关系模型的所有记录

这是我的模型

class Organization extends Model { 

    protected $table = 'organizations'; 

    public function offices() 
    { 
     return $this->hasMany('App\Models\Office'); 
    } 

    public function users() 
    { 
     return $this->offices()->users(); 
    } 
.... 

所以..我想从所有用户(所有办公室的)组织。 但我不知道该怎么做类似

$this->offices()->users(); 

(避免用户手动集合或映射到做到这一点)

谢谢!

回答

2

所以,你有组织ID。您可以通过使用whereHas()加载所有用户:

$users = User::whereHas('office', function ($q) use ($organizationId) { 
     $q->where('organization_id', $organizationId); 
    }) 
    ->get(); 

确保office()关系在User模型正确定义:

public function office() 
{ 
    return $this->belongsTo('App\Office'); 
} 

或者,你可以定义hasManyThrough()关系:

public function users() 
{ 
    return $this->hasManyThrough('App\Office', 'App\User'); 
} 

而且使用它:

$organization->users()