Laravel Eloquent - 获取儿童关系模型的所有记录

时间:2017-06-08 15:46:06

标签: laravel eloquent

我的数据模型是这样的: 用户>办公室>组织

这是我的模特

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();

(避免用户手动收集或映射来执行此操作)

谢谢!

1 个答案:

答案 0 :(得分: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()