也许重复,但我的搜索没有任何成功。我们有什么: Laravel 5.2,三张表
user_tariff_hours_history
- 编号
- user_tariff_id
- ...
user_tariff
- 编号
- 用户编号
- ...
用户
- 编号
- ...
我想通过 user_tariff 获得 user 当前 user_tariff_hours_history
正如 Laravel 官方文档所说,我需要在我的 user_tariff_hours_history 模型中使用 hasManyThrough 方法获取 getter https://laravel.com/docs/5.5/eloquent-relationships#has-many-through
但是使用该 getter 的查询结果不是预期的。
我得到整个users 表,而不是当前user_tariff_hours_history
的用户setter/getter :
public function getUsers() {
return $this->hasManyThrough('App\SARegistration',
'App\SAUser_tariff',
'user_id', //FK on SARegistration (users)
'id', //Local Key of ?
'user_tariff_id'); //FK on SAUser_tariff (user_tariffs)
}
注意:在文档中 hasManyThrough 有 6 个参数,但 Laravel 说它只有 5 个参数,而不是我尝试使用不同的参数组合
最佳答案
在 User
模型中定义名为 userTariffHoursHistory
的 hasManyThrough
关系并使用 whereHas()
:
User::whereHas('userTariffHoursHistory', function($q) use($userTariffHoursHistoryId) {
$q->where('id', $userTariffHoursHistoryId);
})->first();
或者定义两个hasMany()
关系(User
模型中的userTariffs
和UserTariff中的
模型),然后使用嵌套的 userTariffHoursHistory
whereHas()
:
User::whereHas('userTariffs', function($q) use($userTariffHoursHistoryId) {
$q->whereHas('userTariffHoursHistory', function($q) use($userTariffHoursHistoryId) {
$q->where('id', $userTariffHoursHistoryId);
});
})->first();
关于php - Laravel 中 hasManyThrough 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47497271/