提问者:小点点

在Laravel有很多麻烦


也许有点傻,但我的搜索没有成功。我们有:Laravel 5.2,三张桌子

user_tariff_hours_history

  • id
  • user_tariff_id
  • ...

user_tariff

  • id
  • 用户id

用户

  • id
  • ...

我想通过当前用户\u费率\u小时\u历史记录的用户\u费率获取用户

正如官方的Laravel文档所说,我需要在我的用户历史模型中使用hasManyThrough方法的getterhttps://laravel.com/docs/5.5/eloquent-relationships#has-许多通过

但使用该getter的查询结果出乎意料。

我得到的是整个用户表,而不是当前用户\u关税\u小时\u历史记录的用户

吸气剂:

    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个参数,而我尝试使用的是diffirent参数组合


共1个答案

匿名用户

在用户模型中定义一个名为userTariffHours历史的关系,并使用其中有():

User::whereHas('userTariffHoursHistory', function($q) use($userTariffHoursHistoryId) {
    $q->where('id', $userTariffHoursHistoryId);
})->first();

或者定义两个关系(在UserTariff模型和UserTariff模型中的userTariff和userTariffHours历史),然后使用嵌套的代码。

User::whereHas('userTariffs', function($q) use($userTariffHoursHistoryId) {
    $q->whereHas('userTariffHoursHistory', function($q) use($userTariffHoursHistoryId) {
        $q->where('id', $userTariffHoursHistoryId);
    });
})->first();