我需要帮助。
我正在制作一种类似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()
?
答案 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');
}