php - Laravel 中 hasManyThrough 的问题

标签 php mysql laravel has-many-through eloquent

也许重复,但我的搜索没有任何成功。我们有什么: 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 模型中定义名为 userTariffHoursHistoryhasManyThrough 关系并使用 whereHas():

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

或者定义两个hasMany()关系(User模型中的userTariffsUserTariff中的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/

相关文章:

php - Laravel Logging - 自定义 channel 不写

arrays - Laravelcollect($array)->sortBy($value)->values() 显示在屏幕上

php - 拉维尔 5 : Use 301 instead of 302

php - 来自 $_SERVER ['HTTP_REFERER' ] 的结果,当 referer header 未发送到服务器时

php - .htaccess 不包括重写 css 和图像

php - cakephp 错误 - 验证显示两次

mysql - 解释 MySQL 解释执行计划数学,两个计划之间的区别

mysql - 带小数的字段 - 使用哪种数据类型?

php - 如果为NULL,如何将值插入表中? - MySql

mysql - xampp控制运行mysql时无法登录mysql