在关系查询中使用hasManyThrough

时间:2017-10-20 17:47:47

标签: php laravel eloquent relationship laravel-eloquent

我有以下表格:

users
id|name|username

Areas
id|name

user_area
id|user_id|area_id

Buildings
id|name|area_id

在用户模型中,我想调用查询,即每个用户都有自己的分配区域,并且他指定的区域有很多建筑物,因此我在用户模型中创建了一个查询用户指定建筑物的方法。 在App \ User Model中:

 public function areas()
    {
        return $this->belongsToMany('App\Area','area_user');
    }
  public function UserBuildings(){
        return $this>hasManyThrough('App\Building','App\Area','user_id','area_id');
    }

在App \ Area Model中:

public function users(){
        return $this->belongsToMany('App\User','area_user','area_id','user_id');
    }

    public function buildings(){
        return $this->hasMany('App\Building');
    }

在App \ Building Model中:

public function areas(){
        $this->belongsTo('App\Area');
    }

如何在用户模型中构建一个获取用户指定建筑物的关系方法。

由于

1 个答案:

答案 0 :(得分:1)

您无法在此处使用hasManyThrough,但您可以使用嵌套whereHas()将所有建筑物分配给经过身份验证的用户:

Building::whereHas('area', function ($q) {
    $q->whereHas('users', function ($q) {
        $q->where('id', auth()->id());
    });
})->get();

此外,您应该在areas模型中将area关系重命名为Building,因为每个建筑物只属于一个区域。