Php 引用一个主键的多个外键

Php 引用一个主键的多个外键,php,mysql,laravel,laravel-5,eloquent,Php,Mysql,Laravel,Laravel 5,Eloquent,我已经为此挣扎了几个星期,但似乎在任何地方都找不到答案 我试图将三个外键引用到另一个表的一个主键中 以下是一些信息: 用户表 |---------------------| | id | |---------------------| | 1 | |---------------------| | 2 | |---------------------| | 3

我已经为此挣扎了几个星期,但似乎在任何地方都找不到答案

我试图将三个外键引用到另一个表的一个主键中

以下是一些信息:

用户表

|---------------------|
|        id           |
|---------------------|
|         1           |
|---------------------|
|         2           |
|---------------------|
|         3           |
|---------------------|
服务表

|---------------------|
|        id           |
|---------------------|
|         1           |
|---------------------|
|         2           |
|---------------------|
|         3           |
|---------------------|
具有三个外键的服务表引用用户id

|---------------------|------------------|------------------|------------------|
|        id           |     tenant       |  service_person  |     landlord     |
|---------------------|------------------|------------------|------------------|
|         1           |        1         |         2        |         3        |
|---------------------|------------------|------------------|------------------|
用户模型

    public function service(){
        return $this->hasMany(Service::class, 'id');
    }
    public function tenant(){
        return $this->belongsTo(User::class, 'id', 'tenant');
    }

    public function service_person(){
        return $this->belongsTo(User::class, 'id', 'service_person');
    }

    public function landlord(){
        return $this->belongsTo(User::class, 'id', 'landlord');
    }
服务模式

    public function service(){
        return $this->hasMany(Service::class, 'id');
    }
    public function tenant(){
        return $this->belongsTo(User::class, 'id', 'tenant');
    }

    public function service_person(){
        return $this->belongsTo(User::class, 'id', 'service_person');
    }

    public function landlord(){
        return $this->belongsTo(User::class, 'id', 'landlord');
    }
因此,当我尝试使用tinker查询
User::find()->service
时,我的三个用户中只有一个找到了结果,这就是服务人员。其他的只返回一个空对象

查询结果:

>>> User::find(1)->service
=> Illuminate\Database\Eloquent\Collection {#3125
     all: [
       App\Service {#3156
         id: 1,
         tenant: 2,
         service_person: 1,
         landlord: 3
       },
     ],
   }
>>> User::find(2)->service
=> Illuminate\Database\Eloquent\Collection {#3165
     all: [],
   }
>>> User::find(3)->service
=> Illuminate\Database\Eloquent\Collection {#3166
     all: [],
   }
我试图实现的是寻找与该用户相关的所有服务,不管该用户是租户、服务商还是房东,所以我可以在前端显示它

你知道我怎样才能做到吗

理想情况下,我不希望进行多对多关系并创建透视表


提前感谢

我认为问题在于用户模型的关系:

用户模型:

public function servicesTenants(){
return $this->hasMany(Service::class, 'tenant');
}
public function servicesPerson(){
return $this->hasMany(Service::class, 'service_person');
}
public function servicesLandlord(){
return $this->hasMany(Service::class, 'landlord');
}
现在,您可以尝试:

$user=User::with(['servicesLandlord','servicesPerson','servicesTenants'])->find($user_id);
$userServices=Service::where('tenant',$user_id)->orWhere('service_person',$user_id)->
orWhere('landlord',$user_id)->get();
如果您想获得所有用户的服务,而不考虑关系,您可以尝试:

$user=User::with(['servicesLandlord','servicesPerson','servicesTenants'])->find($user_id);
$userServices=Service::where('tenant',$user_id)->orWhere('service_person',$user_id)->
orWhere('landlord',$user_id)->get();

您可以执行以下服务::where('Service_person',$userID),然后获得与该服务人员相关的所有服务。在服务关系中,您必须从服务表中指定一个外键列。这就是为什么它只对第一个用户有效,因为两个ID都是1谢谢你回复@Collin。我考虑了where(),但我的主要问题是让所有与使用相关的服务都经过身份验证,比如
auth()-user()->service
,以在表上显示这可以正确完成吗?服务::where('Service_person',auth()->user()->id)True,但如果该服务人员是房东和租户该怎么办。我试图实现的是寻找与该用户相关的所有服务,不管该用户是租户、服务商还是房东,我的朋友,谢谢。救了我的命