2017-10-20 130 views
0

我有以下表格:在关系查询中使用hasManyThrough

users 
id|name|username 

Areas 
id|name 

user_area 
id|user_id|area_id 

Buildings 
id|name|area_id 

在用户模式我想打电话查询,每一个用户都有自己的指定区域,并分配给他的领域有许多建筑,所以我创建了一个方法查询用户分配建筑物的用户模型。 在应用程序\用户模型:

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

在应用程序\区域模式:

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

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

在应用程序\建筑模型:

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

我怎么能结构,用户模型的关系方法获取用户分配的建筑物。

感谢

回答

1

不能使用hasManyThrough在这里,但你可以使用嵌套whereHas()获得分配给身份验证的用户的所有建筑物:

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

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

+0

感谢您的回复,我在我的控制器中尝试了上述查询。错误显示: Symfony \ Component \ Debug \ Exception \ FatalThrowableError(E_ERROR) 调用成员函数getRelationExistenceQuery()null ==================== ===== 试图找出问题的地方,我注意到当我查询指定建筑物ID的区域名称时,显示的错误: >>> App \ Building :: find(1) - > area PHP错误:试图获取第1行的非对象属性 >>> – user2873860

+0

@ user2873860此错误与此代码无关。 –

+0

当我删除代码时,错误消失。所以我认为它是相关的 – user2873860