更新:显然$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;
}
它找不到任何记录,即使数据库中存在某些记录。我正确使用这些关系吗?
提前致谢!
答案 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){