不能让Laravel雄辩的hasManyThrough工作

时间:2018-02-08 13:44:40

标签: laravel eloquent relationship

我需要帮助。

我正在制作一种类似reddit的网站。

我需要通过用户所做的线程向我提供用户及其karmas的个人资料的查询。

表和关系:

  

用户有一个个人资料
   用户通过线程有很多threadKarmaPoints

    public function threadKarmaPoints() {
    return $this->hasManyThrough(
        'App\Models\ThreadKarmaView',
        'App\Models\ThreadView',
        'userId',
        'threadId',
        'userId',
        'threadId');
}

查询:(我需要通过用户名而不是id来获取用户)

$user = UserView::where('username', $username)
            ->with(['profile', 'threadKarmaPoints'])
            ->firstOrFail();

这给了我空数组。虽然我删除了'threadKarmaPoints' in,但它会向我提供用户和他的个人资料,所以我认为我的threadKarmaPoints关系一定有问题。

其他问题:在雄辩的问题中,->with()应该是第一个还是->where()

1 个答案:

答案 0 :(得分:1)

请查看以下示例,并阅读以下hasManyThrough关系中每个参数旁边的评论:

user
    id - integer

thread
    id - integer
    user_id - integer

karma_points
    id - integer
    thread_id - integer

这就是你们的关系应该如何

public function threadKarmaPoints() {
    return $this->hasManyThrough(
        'App\Models\ThreadKarmaView', //target entity
        'App\Models\ThreadView', //go-through entity
        'user_id', // Foreign key of User on ThreadView table
        'thread_id', // Foreign key of ThreadView on ThreadKarmaView table
        'id', //Local key of User table
        'id' //Local key of ThreadView table
     );
}

最终修改:

以下代码应该有效

public function threadPostKarmaPoints() {
    return $this->hasManyThrough(
        'App\Models\Views\ThreadKarmaView',
        'App\Models\Views\ThreadView',
        'createdBy',
        'threadId',
        'userId',
        'threadId');
}