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,但如果该服务人员是房东和租户该怎么办。我试图实现的是寻找与该用户相关的所有服务,不管该用户是租户、服务商还是房东,我的朋友,谢谢。救了我的命