Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在关系查询中使用hasManyThrough_Php_Laravel_Eloquent_Relationship_Laravel Eloquent - Fatal编程技术网

Php 在关系查询中使用hasManyThrough

Php 在关系查询中使用hasManyThrough,php,laravel,eloquent,relationship,laravel-eloquent,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 在用户模型中,我想调用query,以确保每个用户都有其指定的区域,并且其指定的区域有许多建筑物,因此我在用户模型中创建了一个方法来查询用户指定的建筑物。 应用内\用户模型: public function areas() { return $this->bel

我有以下表格:

users
id|name|username

Areas
id|name

user_area
id|user_id|area_id

Buildings
id|name|area_id
在用户模型中,我想调用query,以确保每个用户都有其指定的区域,并且其指定的区域有许多建筑物,因此我在用户模型中创建了一个方法来查询用户指定的建筑物。 应用内\用户模型:

 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');
    }
如何在用户模型中构造关系方法,以获取用户指定的建筑


谢谢

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

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

另外,您应该将
区域
关系重命名为
建筑
模型中的
区域
,因为每个建筑只属于一个区域。

谢谢您的回复,我在我的控制器中尝试了您的上述查询。错误显示:Symfony\Component\Debug\Exception\FatalThrowableError(E_Error)调用成员函数getRelationExistenceQuery(),返回null==============================试图找出问题所在,我注意到在查询指定建筑id的区域名称时,错误显示:>>>App\building::find(1)->区域PHP错误:尝试获取第1行的非对象属性>>@user2873860此错误与此代码无关。当我删除代码时,错误消失。所以我觉得是related@user2873860如果您讨论的是关系错误,则需要修复所有关系。如果你说的是
尝试获取非对象的属性
,那么这意味着没有ID=1的
建筑
,也没有与此代码相关的
App\Building::find(1)->area
是的,你是对的,我没有ID=1的建筑,现在我尝试了ID=24的建筑{776 ID:24,name:“木工车间”,符号:“V”,区域id:6,建筑类型:8,创建时间:null,更新时间:null,},但现在它返回null而不是错误:>>>App\building::find(24)->area=>null,在areas db表中有id=6的区域:App\area{759 id:6,名称:“F,位置_id:3,},