我有以下表格:
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');
}
如何在用户模型中构建一个获取用户指定建筑物的关系方法。
由于
答案 0 :(得分:1)
您无法在此处使用hasManyThrough
,但您可以使用嵌套whereHas()
将所有建筑物分配给经过身份验证的用户:
Building::whereHas('area', function ($q) {
$q->whereHas('users', function ($q) {
$q->where('id', auth()->id());
});
})->get();
此外,您应该在areas
模型中将area
关系重命名为Building
,因为每个建筑物只属于一个区域。