【发布时间】:2020-04-23 08:14:31
【问题描述】:
我已经为此苦苦挣扎了几个星期,但我似乎无法在任何地方找到答案。
我正在尝试将三个外键引用到另一个表上的一个主键中。
这里有一些信息:
用户表
|---------------------|
| id |
|---------------------|
| 1 |
|---------------------|
| 2 |
|---------------------|
| 3 |
|---------------------|
服务表
三个外键引用user_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');
}
因此,当我尝试使用 tinker 查询 User::find()->service 时,我的三个用户中只有一个找到了结果,即 service_person。其他的只是返回一个空对象。
查询结果:
>>> 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: [],
}
我想要实现的是寻找与该用户相关的所有服务,无论该用户是租户、service_guy 还是房东,我都可以在前端显示它。
知道如何实现这一目标吗?
理想情况下,我不想建立多对多关系并创建数据透视表。
提前谢谢你
【问题讨论】:
-
您可以执行以下 Service::where('service_person', $userID) 然后获得与该服务人员相关的所有服务。
-
在您的服务关系中,您必须指定服务表中的外键列之一。这就是为什么它只对第一个用户有效,因为两个 id 都是 1
-
感谢您回复@Collin。我想到了 where(),但我的主要问题是让所有与使用相关的服务都经过身份验证,有点像
auth()-user()->service,显示在桌子上 -
这样可以吗? Service::where('service_person', auth()->user()->id)
-
是的,但是如果 service_person 是房东和租户怎么办。我想要实现的是寻找与该用户相关的所有服务,无论该用户是租户、service_guy 还是房东
标签: php mysql laravel laravel-5 eloquent