Laravel Pivot Tables - 从反向关系表访问

时间:2014-12-25 16:55:25

标签: php mysql laravel-4 eloquent

更新:显然$problem->userRatings()->count();返回1,所以记录确实存在,但由于某种原因,脚本仍然没有进入foreach循环...

更新2 /解决方案:我感到非常愚蠢,但是它无法正常工作的原因是,我应该foreach($problem->userRatings() as $rating){时调用foreach($problem->userRatings as $rating){(动态属性)


在我的数据库中,我有问题,问题和用户。我有用户和问题的模型,而problem_ratings是问题和用户之间的数据透视表,有一个额外的'内容'列存储数字评级值(1-5)。

我的问题模型中的多对多关系:

public function userRatings(){
    return $this->belongsToMany('User', 'problem_ratings', 'author_id', 'problem_id')->withPivot('content');
}

我的用户模型中的多对多关系:

public function problemRatings(){
    return $this->belongsToMany('Problem', 'problem_ratings', 'author_id', 'problem_id')->withPivot('content');
}

创建problem_ratings元素时,我会将其附加到我的用户模型,如下所示:

$user->problemRatings()->attach($problem->id, array('content' => $val));

我可以通过用户访问数据透视表,但是当我尝试这个时:

foreach($problem->userRatings() as $rating){
    echo "In average loop";
    $newAverage = ($rating->pivot->content) + $newAverage;
}

它找不到任何记录,即使数据库中存在某些记录。我正确使用这些关系吗?

提前致谢!

2 个答案:

答案 0 :(得分:0)

在问题模型中,我认为您的关系应该类似于:

public function userRatings(){
return $this->belongsToMany('User', 'problem_ratings', 'problem_id', 'author_id')->withPivot('content');

}

答案 1 :(得分:0)

当使用foreach循环时,你需要使用动态属性(即没有括号):

foreach($problem->userRatings as $rating){代替foreach($problem->userRatings() as $rating){